| 變量名 | 作用 | 典型值範例 |
|---|---|---|
JAVA_HOME | JDK 安裝根目錄,其他工具 (Maven/Gradle/Tomcat) 依賴此變量定位 JDK | Windows: D:\Java\jdk-17Linux/macOS: /usr/lib/jvm/java-17-openjdk |
PATH | 系統可執行文件搜索路徑,需包含 %JAVA_HOME%\bin (Win) 或 $JAVA_HOME/bin (Unix) | 追加 %JAVA_HOME%\bin |
CLASSPATH | 類加載路徑 (現代項目多由構建工具/IDE 管理,較少手動配置) | .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (Win) |
JAVA_HOME,值:D:\Java\jdk-17 (你的實際安裝路徑)Path (或 PATH) → 「新建」 → %JAVA_HOME%\bin → 移至頂部 (優先使用)CLASSPATH → 值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar> java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+13-LTS-241)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+13-LTS-241, mixed mode, sharing)
> javac -version
javac 17.0.10
> echo %JAVA_HOME%
D:\Java\jdk-17
# Debian/Ubuntu
/usr/lib/jvm/java-17-openjdk-amd64
# CentOS/RHEL
/usr/lib/jvm/java-17-openjdk
# macOS (Homebrew)
/opt/homebrew/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
# 通用查找
readlink -f $(which java) | sed 's:/bin/java::'
# 單用戶:~/.bashrc 或 ~/.zshrc
# 全域:/etc/profile
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 可選
# 立即生效
source ~/.bashrc
$ java -version
openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+7-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17.0.10+7-Ubuntu-120.04, mixed mode, sharing)
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk
# 安裝多版本於不同目錄
# D:\Java\jdk-8
# D:\Java\jdk-11
# D:\Java\jdk-17
# 切換腳本 switch-java.bat
@echo off
set JAVA_HOME=D:\Java\jdk-%1
set PATH=%JAVA_HOME%\bin;%PATH%
echo Switched to JDK %1
java -version
# 安裝 SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 列出可用版本
sdk list java
# 安裝多版本
sdk install java 17.0.10-tem
sdk install java 21.0.2-tem
sdk install java 8.0.402-tem
# 切換版本 (當前終端)
sdk use java 17.0.10-tem
# 設定預設版本
sdk default java 21.0.2-tem
brew install jenv openjdk@17 openjdk@21
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
source ~/.zshrc
jenv add /opt/homebrew/Cellar/openjdk@17/17.0.10/libexec/openjdk.jdk/Contents/Home
jenv add /opt/homebrew/Cellar/openjdk@21/21.0.2/libexec/openjdk.jdk/Contents/Home
jenv global 17.0.10 # 設定全域版本
jenv local 21.0.2 # 專案級版本 (生成 .java-version)
File → Project Structure → SDKs 添加 JDK,項目級 Project SDK 選擇對應版本Window → Preferences → Java → Installed JREs 添加 JDK,勾選對應版本Extension Pack for Java,settings.json 配置 "java.home": "/path/to/jdk"| 現象 | 可能原因 | 解決 |
|---|---|---|
java -version 顯示舊版本 | PATH 順序舊路徑在前 | 將 %JAVA_HOME%\bin 移至 PATH 最前 |
javac: command not found | 未配置 PATH 或 JRE 而非 JDK | 確認安裝 JDK 並配置 bin 目錄 |
| IDE 報錯 "Invalid JDK" | IDE 綁定路徑與環境變量不一致 | IDE 內重新指向 JAVA_HOME 路徑 |
| Linux 修改 profile 不生效 | 未 source 或登錄 Shell 類型不匹配 | source ~/.bashrc 或重新登錄 |
| CLASSPATH 導致類衝突 | 手動配置污染類加載 | 刪除 CLASSPATH,交給 Maven/Gradle/IDE 管理 |
.java-version / .sdkmanrc / pom.xml <maven.compiler.source>FROM eclipse-temurin:17-jdk 彌補環境差異JDK 環境變量配置核心在於 JAVA_HOME 指向 JDK 根目錄、PATH 包含 bin 目錄。Windows 走圖形界面,Linux/macOS 編輯 Shell 配置文件。強烈建議採用 SDKMAN 或 jEnv 管理多版本,專案級鎖定 JDK 版本,IDE 與構建工具同步配置。遵循「最小配置、版本隔離、容器化交付」原則,徹底消除「在我機器上能跑」的環境差異問題。