手動安裝新版 JDK 後,修改 ~/.profile 僅加 export JAVA_HOME=... 並 source,**java -version 仍顯示 1.3** — 環境變量鏈不完整導致系統默認路徑優先生效。
Java 工具鏈 (java、javac、jar、jdb...) 查找順序:
$JAVA_HOME/bin (最高優先)$JRE_HOME/bin$PATH 中的系統路徑 (/usr/bin/java → 符號鏈接到舊版)**僅設置 JAVA_HOME 不夠**,必須重構 PATH 讓新版 bin 目錄**優先於系統路徑**。
~/.bash_profile 或 ~/.profile)# JDK 安裝路徑 (按實際調整)
export JAVA_HOME=/home/epg/j2sdk1.4.2_10
export JRE_HOME=$JAVA_HOME/jre
export JDK_HOME=$JAVA_HOME
export SDK_HOME=$JAVA_HOME
export JAVA_ROOT=$JAVA_HOME
export JAVA_BINDIR=$JAVA_HOME/bin
# 關鍵:PATH 最前面插入新版 bin 目錄
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 兼容性變量 (部分舊腳本/應用依賴)
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
# 注意: 現代 Java (9+) 不建議設置 CLASSPATH, 模組化機制取代
# 此處為 Java 1.4.2 環境必需
source ~/.bash_profile
java -version
# 輸出應為:
# java version "1.4.2_10"
# Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_10-b03)
# Java HotSpot(TM) Client VM (build 1.4.2_10-b03, mixed mode)
which java
# 應指向 $JAVA_HOME/bin/java
| 錯誤做法 | 後果 | 正確做法 |
|---|---|---|
| 只 export JAVA_HOME | PATH 仍優先匹配 /usr/bin/java → 舊版生效 | PATH 前插 $JAVA_HOME/bin |
| 修改 /etc/profile 但未重登入 | 當前會話不生效 | source 配置文件 或 重新登入 |
| CLASSPATH 設置錯誤/過時 | 類加載衝突、NoClassDefFoundError | Java 9+ 不設 CLASSPATH; 1.4/1.5/1.6/1.7/1.8 設 .:$JAVA_HOME/lib:$JRE_HOME/lib |
| 多用戶環境混亂 | root/epg/其他用戶 Java 版本不一致 | 各用戶 ~/.bash_profile 獨立配置; 系統級用 /etc/profile.d/java.sh |
# 註冊新版 Java
alternatives --install /usr/bin/java java /home/epg/j2sdk1.4.2_10/bin/java 17000
alternatives --install /usr/bin/javac javac /home/epg/j2sdk1.4.2_10/bin/javac 17000
# 切換版本
alternatives --config java
# 系統級統一管理,無需用戶手動配置 PATH
Java 環境變量**核心鐵律**:JAVA_HOME 定位安裝根目錄,PATH 前插 bin 目錄搶佔優先權。SUSE/bash 環境下,寫入 ~/.bash_profile (登入 Shell 讀取) 而非 ~/.bashrc (交互非登入 Shell 讀取),配合 source 即時生效。現代系統優先使用 alternatives 統一管理多版本共存,徹底告別手動 PATH 搏鬥。