在 CentOS 上出现 Java 版本冲突,通常并不是 Java 本身的问题,而是系统中存在多个 Java 安装,并且不同配置方式互相覆盖导致的。下面系统地说明常见原因和解决方法。
CentOS 上 Java 可能来自以下几种途径:
系统自带(OpenJDK,通过 yum/dnf 安装)
yum install java-1.8.0-openjdk
手动解压安装(Oracle JDK / Tar 包)
/usr/local/jdk1.8.0_201
RPM 包安装(Oracle JDK)
rpm -ivh jdk-8u201-linux-x64.rpm
容器或应用自带 JDK
例如:
/usr/lib/jvm/java-1.8.0/usr/lib/jvm/java-11/usr/local/jdk1.8系统不知道该用哪一个。
PATH 环境变量混乱which java
可能指向:
/usr/bin/java
而 /usr/bin/java 是一个软链接:
ls -l /usr/bin/java
如果软链接和 JAVA_HOME 不一致,就会“看起来版本不对”。
JAVA_HOME 设置不一致常见错误:
export JAVA_HOME=/usr/local/jdk1.8
但 java -version 显示 11。
原因:
PATH 中 /usr/bin 在前JAVA_HOME 没被程序真正读取alternatives 系统(CentOS 特有)CentOS 使用 alternatives 管理 Java:
alternatives --config java
如果没正确设置,会导致:
java -version 是一个版本javac -version 是另一个版本可能使用了不同的 Java。
which java
java -version
ls /usr/lib/jvm/
alternatives --list | grep java
echo $JAVA_HOME
echo $PATH
alternatives(推荐)alternatives --install /usr/bin/java java /usr/local/jdk1.8/bin/java 1
alternatives --install /usr/bin/javac javac /usr/local/jdk1.8/bin/javac 1
alternatives --config java
alternatives --config javac
在 /etc/profile.d/java.sh:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
然后:
source /etc/profile
❌ 同时装了:
但 Tomcat 只支持 8,却跑了 11 → 启动失败
✅ 解决:
alternatives --set java /usr/lib/jvm/java-1.8.0/bin/java
CentOS Java 版本冲突的本质:多个 JDK + PATH / JAVA_HOME / alternatives 不一致
如果你愿意,可以贴出:
java -version
which java
echo $JAVA_HOME
我可以帮你精确分析是哪一种冲突。