首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 環境變量配置全平台指南:Linux / macOS / Windows 10/11 圖文詳解

     編輯:Java 相關知識

前言

正確配置 `JAVA_HOME`、`PATH`、`CLASSPATH` 是 Java 開發環境搭建的第一步,也是排查「`java` 不是內部命令」、「版本不一致」、「類找不到」等問題的基石。本文提供 **Linux (永久/臨時)、macOS (Intel/Apple Silicon)、Windows 10/11** 三大平台的標準化配置流程、驗證腳本、多版本切換方案及常見錯誤避坑。

一、核心環境變量速覽

變量名作用典型值示例是否必須
JAVA_HOMEJDK 安裝根目錄 (含 bin, lib, include)/usr/lib/jvm/java-17-openjdk / C:\Program Files\Java\jdk-17必須 (IDE、Maven、Gradle、Tomcat 依賴)
PATH命令搜索路徑,需包含 %JAVA_HOME%\bin (Win) 或 $JAVA_HOME/bin (Unix)...:/usr/lib/jvm/java-17-openjdk/bin ... / C:\Program Files\Java\jdk-17\bin必須 (運行 java/javac/jar 等命令)
CLASSPATH類搜索路徑 (現代構建工具/IDE 通常不依賴,可不設置或僅保留 .).:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar / .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar可選 (避免設置錯誤導致類衝突)

二、Linux 通用永久配置 (推薦 /etc/profile.d/ 方式)

優勢:不修改系統核心文件、包管理器升級不覆蓋、所有用戶生效、易管理。

1. 解壓安裝 JDK (以 OpenJDK 17 為例)

# 下載 (或使用包管理器: apt install openjdk-17-jdk / yum install java-17-openjdk-devel)
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz
sudo mv jdk-17.0.2 /usr/lib/jvm/  # 統一管理目錄

2. 創建配置文件 /etc/profile.d/java.sh

sudo tee /etc/profile.d/java.sh > /dev/null <<'EOF'
# Java 環境變量
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
# export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  # 現代項目一般不需要
EOF

sudo chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh  # 當前終端生效

3. 多版本切換:update-alternatives (Debian/Ubuntu/CentOS/RHEL)

# 註冊多個 JDK
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.2/bin/java 1700
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17.0.2/bin/javac 1700
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.20/bin/java 1100

# 交互式切換
sudo update-alternatives --config java
sudo update-alternatives --config javac

# JAVA_HOME 動態獲取 (加入 /etc/profile.d/java.sh)
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")

4. 驗證

java -version
javac -version
echo $JAVA_HOME

三、macOS 配置 (支援 Intel & Apple Silicon M1/M2/M3)

1. 安裝方式對比

方式優點缺點JAVA_HOME 典型路徑
Homebrew (推薦)版本管理、易升級、自動配置 PATH需安裝 Homebrew/opt/homebrew/Cellar/openjdk/17/libexec (M系列) / /usr/local/Cellar/... (Intel)
SDKMAN!多版本切換極致優雅、跨平台需 curl 安裝$HOME/.sdkman/candidates/java/17.0.2-tem
官網 .dmg 安裝圖形化、系統級註冊版本切換麻煩、污染 /Library/Java/JavaVirtualMachines/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

2. Homebrew 安裝與配置 (Zsh 默認 Shell)

# 1. 安裝
brew install openjdk@17  # 或 openjdk (最新 LTS)

# 2. 配置環境變量 (Apple Silicon M系列路徑不同)
# 檢查實際安裝路徑
ls /opt/homebrew/Cellar/openjdk@17/  # M系列
# ls /usr/local/Cellar/openjdk@17/   # Intel

# 3. 寫入 ~/.zprofile (登錄 Shell 載入) 或 ~/.zshrc (交互式 Shell)
cat >> ~/.zprofile <<'EOF'
# Homebrew OpenJDK 17
export JAVA_HOME="/opt/homebrew/opt/openjdk@17/libexec"
export PATH="$JAVA_HOME/bin:$PATH"

# 讓系統 Java 命令可用 (可選,創建符號鏈接)
# sudo ln -sfn $JAVA_HOME/bin/java /usr/local/bin/java
EOF

source ~/.zprofile

3. SDKMAN! 多版本管理 (強烈推薦開發者)

# 1. 安裝
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# 2. 列出可用版本並安裝
sdk list java
sdk install java 17.0.2-tem  # Temurin (Adoptium) 建議
sdk install java 21.0.2-tem

# 3. 切換版本 (當前終端 / 全局 / 項目級 .sdkmanrc)
sdk use java 21.0.2-tem       # 臨時
sdk default java 17.0.2-tem   # 全局默認
echo "java=17.0.2-tem" > .sdkmanrc  # 項目目錄自動切換 (進入目錄觸發)

# 4. JAVA_HOME 自動管理,無需手動配置
echo $JAVA_HOME  # 自動指向當前版本

4. 驗證

java -version
javac -version
/usr/libexec/java_home -V  # 列出系統檢測到的所有 JDK

四、Windows 10/11 圖形化配置 (系統環境變量)

1. 安裝 JDK (建議安裝到無空格、無中文路徑)

  • 下載:Oracle JDK / Eclipse Temurin (Adoptium) / Microsoft Build of OpenJDK / Amazon Corretto。
  • 安裝路徑示例:`C:\Java\jdk-17` (避免 `C:\Program Files\Java\...` 空格導致腳本問題)。

2. 設置系統環境變量 (Win + S 輸入「編輯系統環境變量」)

  1. 點擊 **「環境變量」** 按鈕 → **系統變量** 區域 → **「新建」**:
  2. 變量名:`JAVA_HOME`
    變量值:`C:\Java\jdk-17` (你的實際安裝路徑)
  3. 在 **系統變量** 中找到 **`Path`** (或 `PATH`),雙擊編輯 → **「新建」** → 添加:`%JAVA_HOME%\bin` → 移至 **頂部** (優先使用該版本)。
  4. 可選:新建 `CLASSPATH` → 變量值:`.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar` (現代開發一般不需要,不建議設置)。
  5. 點擊「確定」關閉所有對話框。

3. 命令行驗證 (必須開啟 **新的** CMD / PowerShell / Terminal 窗口)

> java -version
> javac -version
> echo %JAVA_HOME%
> where java  # 確認調用的是哪個 java.exe

4. PowerShell 永久配置腳本 (自動化/遷移用)

$javaHome = "C:\Java\jdk-17"
[Environment]::SetEnvironmentVariable("JAVA_HOME", $javaHome, "Machine")
$path = [Environment]::GetEnvironmentVariable("Path", "Machine")
if (-not $path.Split(';').Contains("%JAVA_HOME%\bin")) {
    $newPath = "%JAVA_HOME%\bin;" + $path
    [Environment]::SetEnvironmentVariable("Path", $newPath, "Machine")
}
# 需管理員權限運行,新開終端生效

五、通用驗證腳本 (跨平台)

保存為 `check-java-env.sh` (Linux/macOS) 或 `check-java-env.bat` (Windows):

#!/bin/bash
# check-java-env.sh
echo "=== Java 環境檢查 ==="
echo "JAVA_HOME: $JAVA_HOME"
echo "PATH 包含 java: $(which java)"
java -version 2>&1 | head -1
javac -version 2>&1 | head -1
echo "--- 測試編譯運行 ---"
cat > /tmp/Test.java <<'EOF'
public class Test { public static void main(String[] args) { System.out.println("Java Env OK: " + System.getProperty("java.version")); } }
EOF
cd /tmp && javac Test.java && java Test && rm Test.java Test.class
:: check-java-env.bat
@echo off
echo === Java 環境檢查 ===
echo JAVA_HOME: %JAVA_HOME%
where java
java -version
javac -version
echo --- 測試編譯運行 ---
echo public class Test { public static void main(String[] args) { System.out.println("Java Env OK: " + System.getProperty("java.version")); } } > %TEMP%\Test.java
cd /d %TEMP% && javac Test.java && java Test && del Test.java Test.class

六、常見錯誤與避坑指南

  • ❌ JAVA_HOME 指向 JRE 目錄 → 必須指向 **JDK 根目錄** (含 bin/javac, lib/tools.jar)。
  • ❌ PATH 中 `%JAVA_HOME%\bin` 寫死路徑 → 升級 JDK 時需改兩處,務必用變量引用。
  • ❌ Windows 路徑含空格/中文 → 安裝到 `C:\Java\jdk-17` 類似純 ASCII 路徑。
  • ❌ Linux/macOS 修改 `/etc/profile` 導致系統升級覆蓋 → 使用 `/etc/profile.d/java.sh` 或用戶級 `~/.bashrc`/`~/.zprofile`。
  • ❌ 多 JDK 共存 PATH 順序錯誤 → 目標版本 `bin` 目錄必須在 **最前面**。
  • ❌ 設置 CLASSPATH 導致類衝突 → 現代 Maven/Gradle/IDE 專案自管理 classpath,**強烈建議不設置全局 CLASSPATH**。
  • ❌ macOS M 系列晶片運行 x86_64 JDK (Rosetta 2) → 優先安裝 ARM64 原生構建 (Temurin, Corretto, Liberica 等均提供 aarch64 版)。
  • ❌ 容器/Docker 中未設置 JAVA_HOME → 基礎鏡像 `eclipse-temurin:17-jdk` 已預配置,自構建鏡像必須 `ENV JAVA_HOME=/opt/java/openjdk`。

七、進階:項目級 Java 版本鎖定

  • Maven:`pom.xml` 配置 `maven.compiler.source/target` 或 `maven-enforcer-plugin` 強制版本。
  • Gradle:`java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))` (Gradle 6.7+)。
  • SDKMAN! `.sdkmanrc`:項目根目錄放入 `java=17.0.2-tem`,進入目錄自動切換。
  • Dockerfile:`FROM eclipse-temurin:17-jdk` 固化基礎鏡像版本。

總結

Java 環境變量配置的核心是:**JAVA_HOME 指向 JDK 根目錄、PATH 優先包含 $JAVA_HOME/bin、不設置全局 CLASSPATH**。Linux 推薦 `/etc/profile.d/` + `update-alternatives`;macOS 首選 **SDKMAN!** 管理多版本,次選 Homebrew;Windows 圖形化設置系統變量並驗證 `where java`。統一使用驗證腳本確保環境一致性,項目級版本鎖定避免「在我機器上能跑」的協作陷阱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved