在 CentOS 上“Java 配置无效”是一个很常见的问题,通常不是 Java 本身坏了,而是环境变量、 alternatives、或 shell 配置没配对。下面按最常见原因逐一说明。
很多人把 JAVA_HOME 写进 ~/.bashrc,但:
crontab、systemd 服务)都会导致不生效。
✅ 正确做法:
# 全局生效
vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_381
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
CentOS 用 alternatives 管理 java 版本。
查看当前:
alternatives --config java
如果没有你安装的版本:
alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_381/bin/java 300
alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_381/bin/javac 300
which java
echo $JAVA_HOME
如果:
/usr/bin/java
/usr/java/jdk11
说明 PATH 里系统 java 优先。
✅ 解决:
export PATH=$JAVA_HOME/bin:$PATH
并确认写在 PATH 最前面
systemd 不会读取 .bashrc / profile
✅ 正确方式:
[Service]
Environment=JAVA_HOME=/usr/java/jdk1.8.0_381
Environment=PATH=/usr/java/jdk1.8.0_381/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
然后:
systemctl daemon-reload
systemctl restart xxx
sudo java -version
可能和当前用户不一样。
✅ 解决:
sudo visudo
加入:
Defaults env_keep += "JAVA_HOME PATH"
或用:
sudo -E java -version
javac -version
如果提示 command not found,说明只有 JRE。
# /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_381
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version
javac -version
which java 指向哪echo $JAVA_HOMEalternatives --config java如果你愿意,可以贴出:
java -version 输出我可以直接帮你精准定位。