用 update-alternatives 管理多 jdk 版本,核心是分别注册 java 和 javac 并确保 java_home 同步;需先验证 jdk 路径下 bin/java 和 bin/javac 可执行,再以一致优先级注册,最后通过 --config 切换并验证 java -version 与 $java_home 版本一致。

用 update-alternatives 管理多个 JDK 版本,核心是让 java 和 javac 命令能独立、同步地切换,同时确保 JAVA_HOME 与之匹配。它不改环境变量,只管命令软链,所以必须手动补全一致性。
确认 JDK 安装路径可用
别急着注册,先验证解压后的 JDK 目录里真有可执行文件。常见错误是解压不全、权限被锁死、或路径写错(比如漏了 bin/java)。
- 检查
/usr/lib/jvm/jdk-17.0.14+8/bin/java是否存在且可执行:ls -l /usr/lib/jvm/jdk-17.0.14+8/bin/java - 测试能否直接运行:
/usr/lib/jvm/jdk-17.0.14+8/bin/java -version—— 必须输出版本号,否则注册后也调不动 - CentOS/RHEL 默认把 OpenJDK 装在
/usr/lib/jvm/java-17-openjdk-*,而 Oracle/Adoptium 包解压后路径常带+或_,别手抖删掉
分别注册 java 和 javac
update-alternatives 不是“选一个就完事”,它管理的是命令软链,java 和 javac 必须分开注册。否则编译时可能用 JDK 21 的 java 却调 JDK 17 的 javac,报 Unsupported class file major version。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 注册 JDK 17:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.14+8/bin/java 170 - 注册 JDK 21:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-21.0.4+7/bin/java 210 - 同样注册
javac(路径和优先级数字要一一对应):sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17.0.14+8/bin/javac 170sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-21.0.4+7/bin/javac 210 - 优先级数字(如 170/210)只影响默认选中项,不决定能否切换;只要注册成功,
--config就能手动选
切换后验证是否真正生效
java -version 对了,不代表构建工具就用了对的 JDK。因为 Maven、Gradle、IDEA 默认读 JAVA_HOME,而 update-alternatives 只改 /usr/bin/java 软链,不碰环境变量。
- 临时修复:切换后手动设
JAVA_HOME:export JAVA_HOME=/usr/lib/jvm/jdk-21.0.4+7 - 长期方案:在
/etc/profile.d/java.sh里加函数,例如:jdk21() { export JAVA_HOME=/usr/lib/jvm/jdk-21.0.4+7; export PATH=$JAVA_HOME/bin:$PATH; }
然后执行jdk21 - 验证是否同步:
java -version和echo $JAVA_HOME输出的主版本号必须一致;否则构建大概率出错
常用操作命令速查
注册完成后,这些命令帮你日常维护:
- 查看所有已注册的 Java 版本:
sudo update-alternatives --display java - 交互式切换:
sudo update-alternatives --config javasudo update-alternatives --config javac - 查看当前所有替代项状态:
sudo update-alternatives --get-selections | grep java - 删除某版本注册(谨慎使用):
sudo update-alternatives --remove java /usr/lib/jvm/jdk-17.0.14+8/bin/java










