简短回答:不需要同时配置多个 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
切换当前默认版本。- 其他版本按需手动调用。