正確配置 Java 環境變量是所有 Java 開發的起點。本文針對 Windows 系統,系統講解 JAVA_HOME、PATH、CLASSPATH 三大核心變量的作用、配置步驟、常見錯誤及驗證方法,並延伸至 Linux/macOS 及 IDEA 專案級配置最佳實踐。
| 變量名 | 作用 | 典型值示例 | 是否必須 |
|---|---|---|---|
JAVA_HOME | 指向 JDK 安裝根目錄。眾多工具 (Maven/Gradle/Tomcat/IDEA) 依賴它定位 JDK | C:\Program Files\Java\jdk-17 | 強烈建議 |
PATH | 系統命令搜索路徑。追加 %JAVA_HOME%\bin 使 java/javac/jar 等命令全局可用 | ...;%JAVA_HOME%\bin | 必須 |
CLASSPATH | 類加載器搜索 .class/JAR 路徑。現代構建工具/IDE 均自動管理,**不建議全局設置** | . (僅當前目錄) 或留空 | 不建議 |
JAVA_HOMEC:\Program Files\Java\jdk-17.0.9 (你的實際 JDK 安裝路徑,**不要包含 \bin**)Path → 「編輯」→ 「新建」→ 輸入 %JAVA_HOME%\binCLASSPATH,值為 . (代表當前目錄)C:\Users> java -version java version "17.0.9" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 17.0.9+8-LTS-211) Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+8-LTS-211, mixed mode, sharing) C:\Users> javac -version javac 17.0.9 C:\Users> echo %JAVA_HOME% C:\Program Files\Java\jdk-17.0.9 C:\Users> where java C:\Program Files\Java\jdk-17.0.9\bin\java.exe C:\Windows\System32\java.exe <-- 若出現此行,說明系統目錄有殘留,需清理 PATH
| 現象 | 原因 | 解決 |
|---|---|---|
'java' 不是內部或外部命令 | PATH 缺少 %JAVA_HOME%\bin 或拼寫錯誤 | 檢查 PATH 項、重啟 CMD/PowerShell |
| 版本不符 (裝 17 卻顯示 11) | PATH 順序靠前的舊 JDK、系統目錄有 java.exe 副本 | 調整 PATH 順序、刪除 C:\Windows\System32 下 java.exe |
IDE 編譯報錯 Unsupported class file major version | IDE 使用的 JDK 與項目語言級別不匹配 | IDEA: File→Project Structure→SDK/Project Language Level 統一 |
| CLASSPATH 導致找不到類 | 全局 CLASSPATH 覆蓋了應用實際依賴 | 刪除系統/用戶 CLASSPATH 變量 |
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
sudo update-alternatives --config java sudo update-alternatives --config javac
核心原則: 全局環境僅提供 JAVA_HOME + PATH,具體項目 JDK 版本、依賴路徑由構建工具聲明。
# build.gradle.kts
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
vendor = JdkSpec.Vendor.ADOPTIUM // 自動下載匹配 JDK
}
}
File → Project Structure → Project → SDK 選擇項目專用 JDKModule → Dependencies → Module SDK 可模塊級覆蓋Settings → Build → Build Tools → Maven/Gradle → JDK for importer 統一導入 JDK# Dockerfile FROM eclipse-temurin:17-jdk-alpine AS builder WORKDIR /app COPY .mvn/ .mvn COPY mvnw pom.xml ./ RUN ./mvnw dependency:go-offline COPY src ./src RUN ./mvnw package -DskipTests FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY --from=builder /app/target/*.jar app.jar # 容器內無需配置環境變量,基礎鏡像已預置 JAVA_HOME/PATH ENTRYPOINT ["java", "-jar", "app.jar"]
環境變量配置看似基礎,實則關係到構建一致性、版本隔離、容器化部署的成敗。遵循「全局極簡 (JAVA_HOME+PATH)、項目聲明式 (Maven/Gradle/Toolchain)、容器無感」原則,能讓你在多版本共存、團隊協作、CI/CD 流水線中零摩擦切換 JDK 環境。建議收藏本文作為環境遷移檢查清單。