在 CentOS 中切换 Java 版本,常见做法有 alternatives 管理、手动配置环境变量 以及 使用 SDKMAN。下面按推荐程度给你详细说明。
alternatives(推荐,系统级)CentOS 默认使用 alternatives 来管理多个 Java 版本。
sudo alternatives --config java
输出示例:
There are 2 programs that provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/java-11-openjdk/bin/java
2 /usr/lib/jvm/java-8-openjdk/bin/java
Enter to keep the current selection[+], or type selection number:
输入对应数字即可切换。
javac(非常重要)sudo alternatives --config javac
⚠️ 只切换
java不切换javac,会导致编译和运行版本不一致。
java -version
javac -version
readlink -f $(which java)
例如:
/usr/lib/jvm/java-11-openjdk/bin/java
JAVA_HOME 应为:
/usr/lib/jvm/java-11-openjdk
编辑:
sudo vi /etc/profile
或用户级:
vi ~/.bashrc
添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
生效:
source /etc/profile
# 或
source ~/.bashrc
echo $JAVA_HOME
java -version
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk list java
sdk install java 17.0.9-tem
sdk install java 8.0.392-tem
sdk default java 17.0.9-tem
# 或临时使用
sdk use java 8.0.392-tem
java -version
alternatives 通用dnfyumupdate-alternatives --list java
| 场景 | 推荐方式 |
|---|---|
| 系统级、服务器 | alternatives |
| 多项目开发 | SDKMAN |
| 自定义 JDK | JAVA_HOME |
如果你愿意,可以告诉我:
我可以给你精确到命令级别的方案。