CentOS安装JDK11.0.2后java -version仍显示旧版本如何解决
核心问题原因
配置不生效主要有三个常见诱因:
- PATH配置顺序错误,新JDK路径放在了原有PATH变量末尾,系统按路径从左到右查找命令时会优先命中旧版JDK
- 执行source命令时错误添加了双引号,命令未被正确识别执行
- 未处理CentOS系统默认的alternatives多版本管理规则,旧版JDK软链接优先级更高
分步解决操作
1. 修正jdk11.sh配置内容
编辑/etc/profile.d/jdk11.sh,调整PATH变量的路径顺序,将新JDK的bin目录放在原有PATH前面,正确配置如下:
export JAVA_HOME=/usr/local/jdk-11.0.2 export PATH=$JAVA_HOME/bin:$PATH
路径匹配规则说明:Shell查找可执行命令时,会严格按照PATH中路径的书写顺序从左到右检索,找到第一个匹配的命令就会执行,把新JDK路径前置才能保证优先命中11.0.2版本。
2. 正确加载配置生效
首先给配置文件添加可执行权限,保证登录时能被系统正常加载:
chmod +x /etc/profile.d/jdk11.sh
你之前执行的"source /etc/profile.d/jdk11.sh"带了双引号,Shell会把整段字符串识别为命令名,属于无效操作,正确的当前会话生效命令为:
source /etc/profile.d/jdk11.sh
如果需要全局所有用户生效,重新登录所有终端会话或者重启系统即可,/etc/profile.d/下的脚本会在用户登录时自动执行。
3. 修正系统alternatives Java配置
CentOS默认通过alternatives工具管理多版本基础命令,若执行which java返回路径为/usr/bin/java,说明当前命中的是系统默认软链接,需要把新JDK注册到alternatives列表并调整优先级:
# 注册JDK11的java命令到alternatives,设置优先级为2(数值越高优先级越高) alternatives --install /usr/bin/java java /usr/local/jdk-11.0.2/bin/java 2 # 选择默认Java版本 alternatives --config java
执行config命令后终端会列出所有已注册的Java版本,输入JDK 11.0.2对应的序号,回车确认即可。
4. 冲突配置排查
如果完成以上操作后版本仍不对,执行以下命令检索所有配置过JAVA_HOME的文件,删除旧版本的冗余配置,避免局部配置覆盖全局配置:
grep -r "JAVA_HOME" /etc/profile /etc/profile.d/ ~/.bashrc ~/.bash_profile
5. 结果验证
执行以下命令校验配置结果:
echo $JAVA_HOME java -version
返回JAVA_HOME路径为/usr/local/jdk-11.0.2,java版本输出为11.0.2即为配置成功,后续安装运行OpenOffice即可正常依赖对应JDK版本。
内容的提问来源于stack exchange,提问作者Amith Kumar

