我在我的 Ubuntu 16.04 机器上同时安装了 Java 8 和 Java 11:
$ update-java-alternatives --list
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
之前我选择了 Java 11,现在我想使用以下命令切换到 Java 8
$ sudo update-java-alternatives --set java-1.8.0-openjdk-amd64
然而,只有 的符号链接被更新/usr/bin/java
,而没有/usr/bin/javac
被更新:
$ javac -version
javac 11.0.5
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
为什么会出现这种情况?如何解决?
答案1
Java 替代方案在 .jinfo 文件中配置,例如您案例中的/usr/lib/jvm/.java-1.8.0-openjdk-amd64.jinfo
和/usr/lib/jvm/.java-1.11.0-openjdk-amd64.jinfo
。查看 Java 8 文件时,您会看到以下行,它配置了 的路径javac
,以及其他所有 Java 二进制文件的路径:
jdkhl javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
不幸的是,您的系统上的脚本似乎update-java-alternatives
已过时,导致以jdkhl
(JDK Headless 的缩写)为前缀的行被忽略。Debian bug 中也讨论过这个问题#825987
。
要修复它,只需/usr/sbin/update-java-alternatives
按照这个差异。