在 CentOS 上“Java 冲突”通常是指系统里装了多个 Java(OpenJDK、Oracle JDK、不同版本),导致 java、javac 命令版本混乱。下面按常见场景给你一套解决办法。
java -version
which java
ls -l /usr/bin/java
查看已安装 JDK:
rpm -qa | grep -i jdk
rpm -qa | grep -i java
CentOS 用 alternatives 解决多 Java 冲突。
假设你安装了:
/usr/lib/jvm/java-1.8.0-openjdk/usr/java/jdk1.17.0_xxalternatives --install /usr/bin/java java /usr/lib/jvm/java-1.8.0-openjdk/bin/java 1
alternatives --install /usr/bin/java java /usr/java/jdk-17/bin/java 2
alternatives --config java
按编号选择即可。
alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.8.0-openjdk/bin/javac 1
alternatives --install /usr/bin/javac javac /usr/java/jdk-17/bin/javac 2
alternatives --config javac
如果你只给某个用户或某个服务用:
vi ~/.bashrc
添加:
export JAVA_HOME=/usr/java/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
生效:
source ~/.bashrc
⚠ 只对当前用户/脚本有效,不影响系统命令
如果不需要旧版本:
yum remove java-1.7.0-openjdk
yum remove java-1.8.0-openjdk
或 RPM:
rpm -e jdk-xxx
很多服务读的是 JAVA_HOME:
vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
然后:
source /etc/profile
✅ java -version 和 javac -version 不一致 → 没管 javac
✅ 系统命令还是旧 Java → 没用 alternatives
✅ Docker / systemd 服务不生效 → 要重启服务
如果你愿意,可以贴一下:
java -versionrpm -qa | grep jdk我可以帮你精确到命令级别处理。