专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

新手必看:Rocky9.6 如何安装 JDK?多版本管理这样操作更高效

ins518 2025-08-21 03:11:53 技术文章 2 ℃ 0 评论

1.下载jdk

到Oracle官网下载,为了方便管理,我下载到: /usr/local/src/jdk

jdk-8u202-linux-x64.tar.gz
jdk-11.0.27_linux-x64_bin.tar.gz

2.解压到安装目录

创建安装目录

sudo mkdir -p /u01/jdk  # 创建目录
sudo chown -R root:root/u01/jdk  # 设置权限

解压,tar.gz包解压就可以使用,无需编译,如下命令:

tar -xzf jdk-8u202-linux-x64.tar.gz -C /u01/jdk/
tar -xzf jdk-11.0.27_linux-x64_bin.tar.gz -C /u01/jdk/

3.多个版本管理

用alternatives工具进行版本管理,alternatives工具是Rocky系统默认的版本管理工具。

3.1.注册 JDK 到alternatives

# 注册 java
sudo alternatives --install /usr/bin/java java /u01/jdk/jdk1.8.0_202/bin/java 2000
sudo alternatives --install /usr/bin/java java /u01/jdk/jdk-11.0.27/bin/java 1000
# 注册 javac
sudo alternatives --install /usr/bin/javac javac /u01/jdk/jdk1.8.0_202/bin/javac 2000
sudo alternatives --install /usr/bin/javac javac /u01/jdk/jdk-11.0.27/bin/javac 2000

然后就可以了

不需要可以这样移除注册:

sudo alternatives --remove java /u01/jdk/jdk1.8.0_202/bin/java

切换版本以及查看当前使用的版本和版本列表,输入序号切换版本,命令如下:

sudo alternatives --config java

可以看到,当前版本是序号2,版本:jdk-11.0.27,输入1,选择jdk1.8.0_202,再查看

sudo alternatives --display java

当前切换到了jdk1.8.0_202版本,如下图示:

除了以上命令查看以外,还可以这样查看已经注册的JDK工具

alternatives --list | grep java

4.验证

解压就算安装完成了,只是通过alternatives进行版本管理。因为版本注册的时候,已经映射到/usr/bin/java上,所以无需环境变量配置,也可以直接使用命令

java -version
javac -version

alternatives注册实际是创建软连接到 /usr/bin/java,切换就是改变/usr/bin/java连接指向。

如果我们创建了环境变量,如何去处理环境变量和alternatives的切换问题,这才是本文章注意的目的。

5.环境变量

已经通过alternatives注册了,还需要配置环境变量吗?

alternatives仅影响 /usr/bin 下的命令链接,而有些应用可能无法获取/usr/bin目录,当然也就没法找到java了。所以环境变量还是需要配置的。

5.1.全局配置(所有用户生效)

sudo tee /etc/profile.d/jdk.sh << 'EOF'
export JAVA_HOME=/u01/jdk/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
EOF
# 立即生效
source /etc/profile.d/jdk.sh

验证,切换用户测试

su - iRain
java -version

5.2.存在问题

当我们配置环境变量后,通过alternatives切换,你会发现$JAVA_HOME没有跟着切换,这导致了我们只是切换了alternatives,而环境变量对应的$JAVA_HOME并没有切换

解决该问题,我们通过自动化脚本,修改 /etc/profile.d/jdk.sh,内容如下:

jdk_switch() {
		# 动态提取所有有效JDK路径
		echo "正在扫描可用JDK版本..."
		mapfile -t jdk_paths < <(
				sudo alternatives --display java |
				grep -oP '/[^ ]+/bin/java(?= |$)' |
				sort -u
		)
		# 检查结果
		if [ ${#jdk_paths[@]} -eq 0 ]; then
				echo "错误:未检测到已注册的JDK!"
				echo "请先使用以下命令注册JDK:"
				echo "sudo alternatives --install /usr/bin/java java /path/to/jdk/bin/java 优先级"
				return 1
		fi
		# 显示带编号的菜单
		echo "可用JDK版本:"
		for i in "${!jdk_paths[@]}"; do
				echo "$((i+1))) ${jdk_paths[i]}"
    done
		# 用户选择
		while true; do
				read -p "选择版本编号 (1-${#jdk_paths[@]}): " choice
				[[ "$choice" =~ ^[0-9]+$ ]] && \
				(( choice >= 1 && choice <= ${#jdk_paths[@]} )) && break
				echo "无效输入,请重新选择!"
		done
		target_java="${jdk_paths[choice-1]}"
		# 执行切换
		if sudo alternatives --set java "$target_java"; then
				export JAVA_HOME=$(dirname $(dirname "$target_java"))
				export PATH="/usr/bin:$JAVA_HOME/bin:$PATH"
				echo "切换成功!当前JDK:"
				echo "JAVA_HOME=$JAVA_HOME"
				java -version
		else
				echo "切换失败!请检查sudo权限。"
		return 1
		fi
}

立即生效,设置权限所有用户可用

sudo chmod +x /etc/profile.d/jdk.sh
source /etc/profile.d/jdk.sh

6.切换验证

jdk_switch

上图可知,切换正确。

(end)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表