检查Java版本而无需使用java -version。

我在尝试编译或运行与 "java" 或 "javac" 相关的所有内容时遇到以下错误:
Error occurred during initialization of VM
java/lang/ClassNotFoundException: error in opening JAR file <Zip file open error> /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar

我读到这里说我应该卸载并重新安装JDK,这里写着我应该知道我在电脑上安装的Java版本才能卸载它。
为了检查已安装的版本,我运行java -version但是我得到了上面提到的错误,我怎么能够在没有这个命令的情况下检查我的Java版本呢?
我知道我安装了Java 8,但我不确定具体是哪个版本。

我知道我已安装了Java 8,但我不确定具体是哪个版本。你是如何安装的? - muru
我在一个Linux服务器上安装了大约35个不同的JRE,它们位于各种非标准路径下,但由于它们属于其他用户,所以我无法执行java -version命令。我也无法运行apt和大多数系统工具(我没有su权限)。然而,我对每个"java"二进制文件都有读取权限。有没有办法从这些二进制文件本身找到Java版本号? - Kristopher Noronha
4个回答

要在不运行 `java -version` 的情况下显示安装了哪个版本的Java,请打开终端并输入以下命令:
apt policy openjdk-* oracle-java* 

一小部分 apt policy openjdk-* 的结果如下:
openjdk-7-jre-lib:
  Installed: (none)
  Candidate: (none)
  Version table:
openjdk-8-jdk:
  Installed: 8u162-b12-0ubuntu0.16.04.2
  Candidate: 8u162-b12-0ubuntu0.16.04.2

搜索包含openjdk-*-jreopenjdk-*-jdkoracle-java*的部分,其中通配符*可以是Java版本号,如6、7、8或9。

谢谢,使用那个命令后我得到了很多行,我应该搜索哪一行? - Zeno Raiser

你可以通过以下方式找到默认的java可执行文件的完整路径:
readlink -f "$(which java)"

所有(理智的)我所知道的Java包或捆绑软件都使用包含供应商名称和主要版本号的安装路径名,这可以回答你的问题。例如,在我的系统上
$ readlink -f "$(which java)"
/usr/lib/jvm/java-9-openjdk-amd64/bin/java

告诉我,默认的Java安装版本是OpenJDK 9。

你还可以尝试一下:
dpkg -l | egrep -i 'jre|java|jdk'

你可以使用这个命令来检查你的Java版本:
update-alternatives --config java

7不过,既然楼主只是想要“显示”可用的Java版本而不是更改默认版本,使用update-alternatives --display java会更简单和更好,甚至不需要使用sudo - David Foerster