簡短回答:不需要同時配置多個 JDK 的 JAVA_HOME
和 PATH
,但你可以安裝多個版本,并通過靈活的方式在它們之間切換。
文章目錄
- ? 正確做法:安裝多個 JDK,但只讓一個生效(通過環境變量或 `alternatives`)
- 📌 為什么不能同時配置多個?
- ? 推薦方案一:使用 `alternatives` 管理(推薦,適合系統級切換)
- 1. 安裝多個 JDK(示例)
- 2. 使用 `alternatives` 注冊
- 3. 切換版本
- ? 優點
- ? 推薦方案二:只配置一個 `JAVA_HOME`(適合固定環境)
- ? 推薦方案三:按用戶或項目配置(適合開發環境)
- ? 總結:最佳實踐
- 🔁 驗證當前使用的是哪個 JDK
? 正確做法:安裝多個 JDK,但只讓一個生效(通過環境變量或 alternatives
)
📌 為什么不能同時配置多個?
JAVA_HOME
是一個環境變量,只能指向一個路徑。PATH
中的bin
目錄如果包含多個java
,系統只會使用第一個找到的。- 如果你在
PATH
中同時加入多個 JDK 的bin
,容易導致混亂,難以控制使用的是哪個版本。
? 推薦方案一:使用 alternatives
管理(推薦,適合系統級切換)
這是 CentOS/RHEL 系統的標準做法,可以輕松切換默認的 java
、javac
等命令。
1. 安裝多個 JDK(示例)
假設你已經安裝了:
- JDK 8:
/usr/lib/jvm/jdk8u432-b05
- JDK 11:
/usr/lib/jvm/temurin-11-jdk
- JDK 21:
/usr/lib/jvm/temurin-21-jdk
2. 使用 alternatives
注冊
# 注冊 java 命令
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jdk8u432-b05/bin/java 1
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-11-jdk/bin/java 2
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-21-jdk/bin/java 3# 注冊 javac 命令(可選)
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk8u432-b05/bin/javac 1
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-11-jdk/bin/javac 2
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-21-jdk/bin/javac 3
3. 切換版本
sudo alternatives --config java
會彈出菜單讓你選擇使用哪個 JDK:
There are 3 programs which provide 'java'.Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jdk8u432-b05/bin/java2 /usr/lib/jvm/temurin-11-jdk/bin/java3 /usr/lib/jvm/temurin-21-jdk/bin/javaEnter to keep the current selection[+], or type selection number:
輸入編號即可切換。
? 優點
- 全局生效,所有用戶都使用統一版本。
- 切換簡單,命令清晰。
- 符合 Linux 系統管理規范。
? 推薦方案二:只配置一個 JAVA_HOME
(適合固定環境)
如果你確定長期使用某個版本(如 JDK 8),可以只配置一個環境變量。
# /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/jdk8u432-b05
export PATH=$JAVA_HOME/bin:$PATH
其他 JDK 只需解壓到 /usr/lib/jvm/
目錄即可,不需要配置環境變量,需要時手動調用:
# 臨時使用 JDK 11
/usr/lib/jvm/temurin-11-jdk/bin/java -version# 或臨時切換
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
$JAVA_HOME/bin/java -version
? 推薦方案三:按用戶或項目配置(適合開發環境)
不同用戶或項目使用不同 JDK:
# 用戶家目錄下的 .bashrc
# 用戶 A 用 JDK 8
export JAVA_HOME=/usr/lib/jvm/jdk8u432-b05# 用戶 B 用 JDK 11
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
或者在項目腳本中指定:
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
./mvnw compile
? 總結:最佳實踐
方案 | 適用場景 | 是否需要配置多個環境變量 |
---|---|---|
alternatives | 系統管理員,全局切換 | ? 只注冊,不同時生效 |
單一 JAVA_HOME | 固定使用一個版本 | ? 只配置一個 |
手動調用路徑 | 臨時使用其他版本 | ? 不配置,直接調用 |
用戶級配置 | 多用戶不同需求 | ? 每個用戶可不同 |
項目級腳本 | CI/CD、構建腳本 | ? 按需設置 |
🔁 驗證當前使用的是哪個 JDK
java -version
echo $JAVA_HOME
which java
? 結論:
不需要同時配置多個 JDK 的環境變量!
正確做法是:
- 安裝多個 JDK 到不同目錄(如
/usr/lib/jvm/
下)。- 使用
alternatives
或JAVA_HOME
切換當前默認版本。- 其他版本按需手動調用。