你问得比较简短,我先给你常见原因分析 + 排查方法,你可以对照看看是哪一种情况。
最常见的问题:
java -version
能用,但:
echo $JAVA_HOME
是空的或路径不对。
典型错误配置:
export JAVA_HOME=/usr/java/jdk1.8.0_201
但真实路径是:
/usr/lib/jvm/java-1.8.0-openjdk
✅ 正确做法:
which java
readlink -f $(which java)
CentOS 常自带 OpenJDK:
/usr/lib/jvm/java-1.8.0-openjdk
/usr/lib/jvm/java-11-openjdk
如果你又装了 Oracle JDK,但没切换,就会“配错”。
✅ 查看所有 Java:
ls /usr/lib/jvm/
✅ 切换版本:
alternatives --config java
alternatives --config javac
很多人只改了:
~/.bashrc
但服务(systemd)读不到。
✅ 推荐统一配置:
/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
即使你配了环境变量,systemctl 启动的 Java 程序仍然可能找不到 Java。
✅ 在 service 文件里加:
[Service]
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
✅ 检查:
ls -ld $JAVA_HOME
java -version
which java
readlink -f $(which java)
echo $JAVA_HOME
$JAVA_HOME/bin/java -version
如果哪一步报错,基本就能定位问题。
我可以直接帮你写正确的配置方案。