Ubuntu安装OpenJDK 21后,update-alternatives仅自动注册java命令,javac、jar、javadoc等需手动注册并统一优先级(如2100),再分别执行--config切换,最后用readlink验证路径一致性。

Ubuntu 安装 OpenJDK 21 后,update-alternatives 不会自动完成全部配置——系统只注册了 java 命令,而 javac、jar、javadoc 等关键工具往往仍指向旧版本或未注册。这是导致 java -version 和 javac -version 输出不一致的最常见原因。
确认是否已自动注册
先检查系统是否已为 Java 工具创建替代项:
- 运行
update-alternatives --list java—— 若有输出(如/usr/lib/jvm/java-21-openjdk-amd64/bin/java),说明java已注册 - 运行
update-alternatives --list javac—— 若提示no alternatives,说明javac还没注册,必须手动补上 - 同理检查
jar、javadoc、jps(JDK 21 推荐也配)
手动注册缺失的命令(以 JDK 21 为例)
路径需严格匹配真实安装位置。Ubuntu 22.04+ 默认架构为 amd64 或 arm64,用 ls /usr/lib/jvm/ 确认目录名(常见为 java-21-openjdk-amd64):
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-21-openjdk-amd64/bin/java 2100sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-21-openjdk-amd64/bin/javac 2100sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java-21-openjdk-amd64/bin/jar 2100sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc 2100
优先级设为 2100 可确保它在多版本中默认胜出,且便于后续扩展(如 JDK 22 设 2200)。
验证并同步切换所有工具
注册完成后,务必逐个验证并统一版本:
- 执行
sudo update-alternatives --config java,选择 JDK 21 对应条目 - 再执行
sudo update-alternatives --config javac,选同一 JDK 路径下的javac - 对
jar、javadoc重复该操作 - 最终用
readlink -f $(which java)和readlink -f $(which javac)检查输出路径是否完全一致
IDE 和构建工具不受影响?别忽略这一步
update-alternatives 只改系统命令,不影响以下配置:
-
IDEA/VS Code:依赖自身设置的 JDK 路径或
JAVA_HOME,建议在项目设置里显式指定/usr/lib/jvm/java-21-openjdk-amd64 -
Maven:默认用系统
java,但若项目含toolchains.xml,则以该文件为准 -
Gradle:读取
JAVA_HOME或当前 shell 的java版本;推荐在gradle.properties中设org.gradle.java.home=/usr/lib/jvm/java-21-openjdk-amd64

















