正確安裝配置 JDK 是 Java 開發的第一步。本文涵蓋 Windows (98/ME/2000/XP) 與 Linux (RPM/解壓版) 多平台安裝、環境變數配置、類路徑管理、擴展機制、常見坑點與驗證步驟。
JAVA_HOME=L:\Java\J2SE # 安裝目錄
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
PATH=...;%JAVA_HOME%\bin
JAVA_HOME=L:\Java\J2SE
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
PATH=%PATH%;%JAVA_HOME%\bin
C:\> java -version
java version "1.8.0_291" (或更高版本)
C:\> javac -version
javac 1.8.0_291
C:\> echo %JAVA_HOME%
L:\Java\J2SE
`/usr/java/jdk
# 安裝到 /usr/local/home
rpm -i --badreloc --relocate /usr/java=/usr/local/home jdk-8u291-linux-x64.rpm
# 預設路徑安裝
rpm -ivh jdk-8u291-linux-x64.rpm
export JAVA_HOME=/usr/java/jdk1.8.0_291
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
執行 `source ~/.bashrc` 生效。
tar -xzf jdk-8u291-linux-x64.tar.gz -C /opt/
ln -s /opt/jdk1.8.0_291 /opt/jdk # 符號鏈接便於版本切換
# 同步配置 JAVA_HOME=/opt/jdk
| 方式 | 範圍 | 優先級 | 適用場景 |
|---|---|---|---|
| 1. 系統環境變數 CLASSPATH | 全域 | 低 | 極少數真正全域共享庫 |
| 2. 啟動參數 `-cp` / `-classpath` | 單次 JVM | 高 | 開發測試、腳本、生產啟動腳本 |
| 3. 放入 `$JAVA_HOME/jre/lib/ext/` | 全域 (擴展類加載器) | 中 | JCE 擴展、JDBC 驅動等基礎設施庫 |
最佳實踐:避免依賴 CLASSPATH 環境變數。Maven/Gradle 專案由建構工具管理依賴;生產部署用啟動腳本顯式 `-cp` 或打包 Fat JAR (`java -jar app.jar`)。
| 現象 | 原因 | 解決 |
|---|---|---|
| `java: command not found` | PATH 未含 `$JAVA_HOME/bin` | 檢查環境變數大小寫、source 生效、路徑正確 |
| `javac: command not found` | 安裝 JRE 而非 JDK | 安裝完整 JDK (含 javac、tools.jar) |
| 版本不符 (`java -version` vs `javac -version`) | 多 JDK 共存,PATH 順序錯誤 | 調整 PATH 順序、用 `update-alternatives` (Linux) 管理 |
| 類找不到 `NoClassDefFoundError` | CLASSPATH 缺失/錯誤 | 檢查 `-cp` 包含所有依賴 JAR 目錄 |
| Windows 路徑含空格失效 | 路徑 `Program Files` 空格 | 用短路徑 `Progra~1` 或避免安裝到含空格路徑 |
JDK 安裝核心在於:JAVA_HOME 指向安裝根目錄、PATH 含 bin 目錄、CLASSPATH 不濫用。Windows 用圖形界面配置系統變數,Linux 用 Shell 配置檔 + 符號鏈接管理版本。驗證 `java -version`/`javac -version` 雙命令輸出一致。現代專案以建構工具管理類路徑,容器化部署隔離環境,告別「在我機器上能跑」的配置地獄。