環境變量三大核心
| 變量名 | 作用 | 典型值 |
JAVA_HOME | JDK 安裝根目錄,其他工具 (Maven, Tomcat, IDE) 依賴此變量定位 JDK | D:\Java\jdk1.8.0_361 |
PATH | 系統可執行文件搜索路徑,包含 %JAVA_HOME%\bin 才能在任意目錄運行 java/javac | %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;... |
CLASSPATH | 類加載器搜索類文件路徑,. 代表當前目錄,核心庫 dt.jar/tools.jar | .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar |
Windows 10/11 圖形化設置步驟
- 右鍵「此電腦」→「屬性」→「高級系統設置」→「環境變量」
- **系統變量**區域 (影響所有用戶,需管理員權限):
- 點擊「新建」→ 變量名:
JAVA_HOME,變量值:D:\Java\jdk1.8.0_361 (你的實際安裝路徑)
- 編輯
Path → 「新建」兩條:%JAVA_HOME%\bin、%JAVA_HOME%\jre\bin → 移至**最頂部**
- 點擊「新建」→ 變量名:
CLASSPATH,變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
- 點擊「確定」保存所有對話框
命令行快速設置 (臨時/腳本適用)
setx JAVA_HOME "D:\Java\jdk1.8.0_361" /M
setx PATH "%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%PATH%" /M
setx CLASSPATH ".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar" /M
驗證安裝與配置
1. 重新打開命令提示符 (關鍵:舊窗口不會自動獲取新變量)
C:\Users\Admin> java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)
C:\Users\Admin> javac -version
javac 1.8.0_361
C:\Users\Admin> echo %JAVA_HOME%
D:\Java\jdk1.8.0_361
2. 編寫測試程式
// Test.java
public class Test {
public static void main(String[] args) {
System.out.println("Java 環境配置成功!");
System.out.println("JAVA_HOME = " + System.getenv("JAVA_HOME"));
System.out.println("java.version = " + System.getProperty("java.version"));
System.out.println("java.home = " + System.getProperty("java.home"));
}
}
3. 編譯運行
C:\Work> javac Test.java
C:\Work> java Test
Java 環境配置成功!
JAVA_HOME = D:\Java\jdk1.8.0_361
java.version = 1.8.0_361
java.home = D:\Java\jdk1.8.0_361\jre
常見問題排查表
| 現象 | 可能原因 | 解決方案 |
java 不是內部命令 | PATH 未生效 / 順序錯誤 / 未重開 CMD | 1. 重開 CMD 2. 檢查 PATH 最前包含 %JAVA_HOME%\bin 3. setx 後需新進程 |
| 版本不符 (如顯示 11.0 但裝的是 8) | 多 JDK 共存,PATH 指向錯誤版本 | 調整 PATH 順序,或在項目中指定 JAVA_HOME |
javac 找不到 | JRE 而非 JDK / PATH 缺少 bin | 確認安裝的是 JDK (含 bin/javac),PATH 包含 bin 目錄 |
| 類找不到 / NoClassDefFoundError | CLASSPATH 缺失 / 包名路徑不匹配 | 確保 . 在 CLASSPATH 首位,編譯運行目錄正確 |
| IDE 識別錯誤 JDK | IDE 綁定舊路徑 | IDE 設置中重新選擇 JDK 路徑 (IDEA: Project Structure → SDK) |
Linux / macOS 配置 (~/.bashrc / ~/.zshrc / /etc/profile)
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 生效
source ~/.bashrc
進階:多版本 JDK 管理
Windows:手動切換 JAVA_HOME
@echo off
set JAVA_HOME=D:\Java\jdk-17
set PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%PATH%
cmd /k
推薦工具:SDKMAN! (跨平台)
# 安裝
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 列出版本
sdk list java
# 安裝/切換
sdk install java 17.0.8-tem
sdk use java 17.0.8-tem
# 項目級鎖定 (.sdkmanrc)
echo "java=17.0.8-tem" > .sdkmanrc
Docker 環境中配置
# Dockerfile
FROM openjdk:8-jdk-alpine
ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV PATH=$JAVA_HOME/bin:$PATH
# CLASSPATH 通常不需設置,Maven/Gradle 管理依賴
最佳實踐總結
- ✅ **JAVA_HOME 指向 JDK 根目錄** (含 bin、lib、include、jre 子目錄)
- ✅ **PATH 最前放 `%JAVA_HOME%\bin`** 確保優先使用該版本
- ✅ **CLASSPATH 首位為 `.`** 保證當前目錄類可被加載
- ✅ **修改後必須重啟終端/IDE/服務** 使生效
- ✅ **生產環境使用 SDKMAN/容器鎖定版本** 避免漂移
- ✅ **項目構建工具 (Maven/Gradle) 不依賴 CLASSPATH** 以依賴管理替代