規範配置 JAVA_HOME、PATH、CLASSPATH 是 Java 開發基礎。本文提供 Windows (GUI/CMD/PowerShell) 與 Linux (bash/zsh/profile) 統一最佳實踐,支援多版本共存與快速切換。
%JAVA_HOME%\bin (Win) 或 $JAVA_HOME/bin (Linux),不要 把具體版本路徑硬編碼在 PATH。.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 在 JDK 9+ 已無效 (模組化移除 dt.jar/tools.jar)。JAVA_HOME = C:\Program Files\Java\jdk-21 (實際安裝路徑)。Path → 新增 %JAVA_HOME%\bin → 移至頂部優先。C:\ProgramData\Oracle\Java\javapath)。java -version、echo %JAVA_HOME%。rem CMD 臨時
set JAVA_HOME=C:\Java\jdk-17
set PATH=%JAVA_HOME%\bin;%PATH%
rem PowerShell 當前會話
$env:JAVA_HOME="C:\Java\jdk-17"
$env:PATH="$env:JAVA_HOME\bin;$env:PATH"
rem 永久 (需管理員)
setx JAVA_HOME "C:\Java\jdk-17" /M
setx PATH "%JAVA_HOME%\bin;%PATH%" /M
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk # 實際路徑用 `readlink -f $(which java) | sed 's:/bin/java::'` 獲取
export PATH=$JAVA_HOME/bin:$PATH
# 不要 export CLASSPATH
修改後 source ~/.bashrc 或重新登入。
# 需 root
cat > /etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
chmod +x /etc/profile.d/java.sh
| 方案 | 平台 | 用法 |
|---|---|---|
| SDKMAN! | Linux/macOS/WSL | sdk install java 21.0.2-tem / sdk use java 17.0.10-tem / sdk default java 21.0.2-tem |
| jEnv | Linux/macOS | jenv add /path/to/jdk / jenv global 17 / jenv local 11 (專案級) |
| Chocolatey + ojdkbuild | Windows | choco install openjdk17 / choco install openjdk21 → 用 setx JAVA_HOME 切換 |
| 手動解壓 + 符號鏈接 | 全平台 | ln -sfn /opt/jdk-21 /opt/java_home → export JAVA_HOME=/opt/java_home |
java -version # 顯示預期版本
javac -version # 編譯器同版本
echo $JAVA_HOME # 指向正確根目錄
ls $JAVA_HOME/bin # 含 java, javac, jar, jlink, jmod...
java --list-modules # JDK 9+ 模組系統正常
Path 插入 C:\ProgramData\Oracle\Java\javapath 指向舊版 → 必須刪除或移至底部。alternatives / update-alternatives 管理系統預設 java,但 不修改 JAVA_HOME,IDE/建構工具仍需顯式配置。rt.jar/tools.jar,舊教程的 CLASSPATH 設定會導致 ClassNotFoundException。