[root@centos ~]# rpm -ql java-1.8.0-openjdk-devel | head -20
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64/bin/javac
...
# 關鍵路徑:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
# 通常有符號鏈接:/usr/lib/jvm/java 或 /usr/lib/jvm/jre 指向此處
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 驗證
java -version
javac -version
echo $JAVA_HOME
[root@centos ~]# vim ~/.bashrc
# 文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 立即生效
source ~/.bashrc
[root@centos ~]# vim /etc/profile
# 文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# 立即生效
source /etc/profile
[root@centos ~]# cat > /etc/profile.d/java.sh <<'EOF'
#!/bin/bash
# Java 環境變數配置
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
EOF
chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh
優勢:獨立文件、易維護、包管理器友好、不污染主 profile。
# 在應用啟動腳本中設定 (如 /opt/tomcat/bin/setenv.sh)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
# 不需設定 CLASSPATH,現代框架不依賴
# 安裝多版本
yum install -y java-11-openjdk-devel java-17-openjdk-devel
# alternatives 管理 (CentOS/RHEL)
alternatives --config java
alternatives --config javac
# 手動切換腳本
switch_java() {
case $1 in
8) export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk ;;
11) export JAVA_HOME=/usr/lib/jvm/java-11-openjdk ;;
17) export JAVA_HOME=/usr/lib/jvm/java-17-openjdk ;;
*) echo "Usage: switch_java 8|11|17"; return 1 ;;
esac
export PATH=$JAVA_HOME/bin:$PATH
java -version
}
[root@centos ~]# echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64
[root@centos ~]# java -version
openjdk version "1.8.0_362"
[root@centos ~]# javac -version
javac 1.8.0_362
[root@centos ~]# $JAVA_HOME/bin/java -version
openjdk version "1.8.0_362"
rt.jar、tools.jar 不再存在,CLASSPATH 環境變數不再需要甚至可能干擾模組解析。| 問題 | 原因 | 解決 |
|---|---|---|
| java: command not found | PATH 未包含 $JAVA_HOME/bin | 檢查 export 順序、source 配置文件 |
| javac: command not found | 安裝的是 JRE 而非 JDK (devel) | yum install java-1.8.0-openjdk-devel |
| 版本不匹配 | 多 JDK 混亂、alternatives 指向錯誤 | alternatives --config java 統一版本 |
| CLASSPATH 導致類衝突 | 舊版 CLASSPATH 包含過期 JAR | 移除 CLASSPATH export (JDK 9+) |
/etc/profile.d/java.sh 模組化配置,全域生效、易維護。JAVA_HOME (JDK 根目錄)、PATH (含 bin)、CLASSPATH (JDK 8 保留,JDK 9+ 移除)。java -version、javac -version、echo $JAVA_HOME。alternatives 或自定義切換函數管理。