update-java-alternatives:仅更改了 java,而未更改 javac

update-java-alternatives:仅更改了 java,而未更改 javac

我在我的 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按照这个差异

相关内容