在 CentOS 上配置 多个 Java(JDK)版本 并灵活切换,常见做法有三种。下面从最推荐到可选方案给你讲清楚,并附完整示例。
alternatives(CentOS 7/8 通用,最规范)这是 CentOS / RHEL 官方推荐的方式,适合系统级多 Java 管理。
例如你已经安装了:
/usr/lib/jvm/java-1.8.0-openjdk/usr/lib/jvm/java-11-openjdk如果没有,可先安装:
yum install -y java-1.8.0-openjdk java-11-openjdk
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.8.0-openjdk/bin/java 1
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk/bin/java 2
(数字 1、2 是优先级,越大越优先)
sudo alternatives --config java
输出示例:
There are 2 programs that provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/java-1.8.0-openjdk/bin/java
2 /usr/lib/jvm/java-11-openjdk/bin/java
Enter to keep current selection[+], or type selection number:
输入数字即可切换。
java -version
JAVA_HOME(开发环境常用)如果你需要 不同用户 / 不同项目 使用不同 Java,这是最灵活的方式。
vim ~/.bashrc
添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
应用:
source ~/.bashrc
可以写多个 alias:
alias java8='export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk'
alias java11='export JAVA_HOME=/usr/lib/jvm/java-11-openjdk'
如果你经常切换 Java / Maven / Gradle,这是最省事的方式。
curl -s "https://get.sdkman.io" | bash
source ~/.sdkman/bin/sdkman-init.sh
sdk list java
sdk install java 8.0.392-tem
sdk install java 11.0.21-tem
sdk use java 8.0.392-tem
sdk default java 11.0.21-tem
✅ 不需要改系统配置
✅ 不影响其他用户
which java
java -version
echo $JAVA_HOME
| 场景 | 推荐方式 |
|---|---|
| 服务器 / 系统级 | alternatives |
| 开发 / 多项目 | JAVA_HOME |
| 频繁切换版本 | SDKMAN ⭐ |
如果你愿意,可以告诉我:
我可以给你精确到命令级别的配置方案。