使用alternatives切换Java时如何保留/etc/alternatives/jre软链接
问题根源
实际是因为Corretto 8的安装包在注册系统alternatives条目时配置不完整:没有把对应版本的jre路径设为java_sdk主组的联动从属链接。而Corretto 11的安装包配全了这套联动逻辑,所以切到Java11时系统会自动生成jre相关软链,切回Java8时因为找不到对应的联动配置,就会把已经生成的jre软链直接删掉。
配置实现步骤
用系统原生的alternatives从属链接机制补全缺失的配置,就能实现切换Java版本时软链自动适配、且不会被删除的效果,不需要写自定义脚本做软链维护。
- 给Corretto 8的java_sdk条目补上jre联动配置
执行命令:
参数说明:alternatives --install /usr/lib/jvm/java java_sdk /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64 1 \ --slave /usr/lib/jvm/jre jre /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre- 沿用系统原生使用的
java_sdk组、主链接路径/usr/lib/jvm/java,不改动原有系统结构 - 优先级设为1,低于Java11的优先级
- 从属配置绑定Corretto8对应的jre实际路径,java_sdk切换时会自动同步更新这个jre链接
- 沿用系统原生使用的
- 给Corretto 11的java_sdk条目补上jre联动配置
执行命令:
这里的jre路径对应Java11的实际安装根目录(Java11没有独立的jre子文件夹,jre内容直接放在根目录下)。alternatives --install /usr/lib/jvm/java java_sdk /usr/lib/jvm/java-11-amazon-corretto 2 \ --slave /usr/lib/jvm/jre jre /usr/lib/jvm/java-11-amazon-corretto
效果验证
配置完成后直接测试切换逻辑即可:
- 切到Java8:执行
alternatives --config java选择Java8选项,逐次检查链路:/usr/lib/jvm/jre软链正常存在,指向/etc/alternatives/jre/etc/alternatives/jre软链指向/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre- 能正常访问对应版本的证书文件
/usr/lib/jvm/jre/lib/security/cacerts
- 切到Java11:执行
alternatives --config java选择Java11选项,逐次检查链路:/usr/lib/jvm/jre软链不会被删掉,依然指向/etc/alternatives/jre/etc/alternatives/jre软链自动指向/usr/lib/jvm/java-11-amazon-corretto- 能正常访问对应版本的证书文件
/usr/lib/jvm/jre/lib/security/cacerts
注意事项
- 重新执行alternatives安装命令只是补全条目信息,不会覆盖你当前已经选好的默认Java版本
- 这套配置和系统原生alternatives的运行逻辑完全一致,后续Java版本升级时不会出现配置失效的问题
- 不需要手动定期维护软链,所有链路的变化都是跟随默认Java版本自动完成的,完全符合预期的链路结构
内容的提问来源于stack exchange,提问作者brian661
相关产品推荐
相关产品推荐

