| 版本 | 類型 | 支援狀態 | 適用場景 |
|---|---|---|---|
| JDK 21 | LTS (長期支援) | Oracle 至 2031/09,社群至 2028+ | 新專案首選,虛擬執行緒、Record 模式匹配、Sequenced Collections、String Templates (Preview) |
| JDK 17 | LTS | Oracle 至 2029/09,社群至 2026+ | 企業級穩定主流,Spring Boot 3 基線、Jakarta EE 10 基線 |
| JDK 11 | LTS | Oracle 至 2026/09,社群至 2024+ | 舊系統維護、Android 開發基線 |
| JDK 8 | 歷史 LTS | Oracle 付費延長支援,社群分支維護 | 極舊系統、特定廠商鎖定環境 |
💡 原則:新專案無條件上 JDK 21 LTS;遷移專案評估相容性後升級至 17/21;拒絕 JDK 8 新專案 (語法落後、效能較差、安全風險、生態棄用)。
OpenJDK21U-jdk_x64_windows_hotspot_21.0.x_x.msi (或 .exe)C:\Java\jdk-21 (無空格、無中文、短路徑) → 下一步 → 完成java.exe、javac.exe 至系統路徑 (可選),但建議手動管理環境變數,方便多版本切換。路徑:Win+S 搜尋「編輯系統環境變數」 → 環境變數 → 系統變數 區塊
| 變數名 | 變數值 | 說明 |
|---|---|---|
JAVA_HOME | C:\Java\jdk-21 | JDK 安裝根目錄 (含 bin/lib/include),所有 Java 工具依賴此變數 |
PATH | %JAVA_HOME%\bin (置於最前端) | 讓 java/javac/maven/gradle 等指令全域可用 |
⚠️ 常見錯誤:
%JAVA_HOME%\bin 前的分號 ; (若非首項)C:\Java\jdk-21\bin (錯誤,應指向根目錄)C:\Program Files\Java\jdk-21 → 建議移至 C:\JavaC:\> java --version
openjdk 21.0.x 2024-xx-xx
OpenJDK Runtime Environment Temurin-21.0.x+xx (build 21.0.x+xx)
OpenJDK 64-Bit Server VM Temurin-21.0.x+xx (build 21.0.x+xx, mixed mode, sharing)
C:\> javac --version
javac 21.0.x
C:\> echo %JAVA_HOME%
C:\Java\jdk-21
C:\> mkdir HelloWorld && cd HelloWorld
C:\HelloWorld> notepad HelloWorld.java
貼上以下內容並存檔:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java " + System.getProperty("java.version") + "!");
}
}
C:\HelloWorld> javac HelloWorld.java
C:\HelloWorld> dir HelloWorld.class
C:\HelloWorld> java HelloWorld
Hello, Java 21.0.x!
# 方案 1:套件管理器安裝 Temurin (推薦)
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo gpg --dearmor -o /usr/share/keyrings/adoptium.gpg
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb jammy main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update && sudo apt install temurin-21-jdk
# 方案 2:手動解壓 tar.gz (通用、可多版本共存)
cd /opt
sudo wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.x%2Bxx/OpenJDK21U-jdk_x64_linux_hotspot_21.0.x_x.tar.gz
sudo tar -xzf OpenJDK21U-jdk_x64_linux_hotspot_21.0.x_x.tar.gz
sudo ln -s jdk-21.0.x_x java-21 # 方便切換版本
# 環境變數配置 (~/.bashrc 或 /etc/profile.d/java.sh)
export JAVA_HOME=/opt/java-21
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc
# 方案 1:Homebrew 安裝 Temurin (推薦)
brew tap adoptopenjdk/openjdk
brew install --cask temurin21
# 方案 2:SDKMAN! 多版本管理神器 (最強推薦)
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk list java # 列出所有可用版本
sdk install java 21.0.x-tem # 安裝 Temurin 21
sdk use java 21.0.x-tem # 切換當前 Shell 版本
sdk default java 21.0.x-tem # 設定預設版本
# 驗證
java --version
javac --version
echo $JAVA_HOME
# 安裝多版本至 C:\Java\jdk-17、C:\Java\jdk-21
# 切換腳本 switch-java.bat
@echo off
set JAVA_HOME=C:\Java\jdk-%1
set PATH=%JAVA_HOME%\bin;%PATH%
echo Switched to JDK %1
java --version
使用:switch-java 21 / switch-java 17 (需在新終端機執行)
sdk install java 17.0.x-tem
sdk install java 21.0.x-tem
sdk use java 17.0.x-tem # 當前 Shell 生效
sdk default java 21.0.x-tem # 全域預設
.mvn/jvm.config 或 pom.xml <maven.compiler.release>21</maven.compiler.release>java { toolchain { languageVersion = JavaLanguageVersion.of(21) } }.sdkmanrc:java=21.0.x-tem,進入目錄自動切換。| 現象 | 可能原因 | 解決方案 |
|---|---|---|
'java' 不是內部或外部命令 | PATH 未包含 %JAVA_HOME%\bin | 檢查 PATH 變數、重開終端機、以管理員身分執行設定 |
Error: JAVA_HOME is not defined (Maven/Gradle) | 系統變數缺少 JAVA_HOME | 新增 JAVA_HOME 指向 JDK 根目錄 (非 bin) |
Unsupported class file major version 65 | 類別檔版本高於執行期 JDK (JDK 21=65, 17=61, 11=55) | 升級執行期 JDK 或編譯時指定 --release 17 |
| IDE 提示「找不到 JDK」 | IDE 配置指向 JRE 而非 JDK | IDEA: Ctrl+Alt+Shift+S → SDKs → + → 指向 JDK 根目錄 |
| 中文亂碼 | 編碼不一致 | 源碼 UTF-8、編譯 -encoding UTF-8、執行 -Dfile.encoding=UTF-8 (JDK 18+ 預設 UTF-8) |
建立 check-java-env.bat (Win) / check-java-env.sh (Linux/mac):
@echo off
echo ========== Java 環境檢查 ==========
echo JAVA_HOME = %JAVA_HOME%
echo.
java --version
echo.
javac --version
echo.
echo 測試編譯執行...
echo public class EnvCheck { public static void main(String[] a) { System.out.println("OK: " + System.getProperty("java.version")); } } > EnvCheck.java
javac EnvCheck.java && java EnvCheck
del EnvCheck.java EnvCheck.class
echo ========== 檢查完成 ==========
pause
✅ 環境就緒標準:
java --version/javac --version正常輸出、JAVA_HOME指向正確、PATH含%JAVA_HOME%\bin、手動編譯執行 HelloWorld 成功、Maven/Gradle 能偵測到 JDK。達成這些,你就擁有了專業 Java 開發的乾淨基石。