1. 多个JDK版本面临的问题
-
公司大多数业务都是用Oracle JDK 8,笔者做大数据查询引擎调研时,则需要使用JDK 17
-
因此,需要在Linux服务器同时安装JDK 8和17,同时需要能智能地快速切换JDK版本,已使用不同的查询引擎需求
-
公司内网限制,笔者选择手动安装Open JDK 17,通过修改
/etc/profile
配置JAVA_HOME
export JAVA_HOME=/usr/java/jdk-17.0.5+8 # export JAVA_HOME=/usr/java/jdk1.8.0_192-amd64 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
-
从上面的配置可以看出,当笔者需要使用JDK 8时,则更新
/etc/profile
,注释掉JDK 17的JAVA_HOME -
source /etc/profile
后,可以让JDK 8重新生效,而JDK 17被禁用 -
在笔者看来,这是一种解决方案,但笔者想知道是否还有更智能的解决方案
2. update-alternatives管理多个JDK版本
- 通过查阅大量资料后发现,大家都比较推崇通过
update-alternatives
或者alternatives
命令,实现多个JDK版本的管理
2.1 失败的实战
-
按照网上教程,首先查看Linux服务器是否拥有JDK的软链接
update-alternatives --config java
-
Linux服务器上没有JDK的软链接
-
通过如下命令创建软链接
update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_192-amd64/bin/java 1 update-alternatives --install /usr/bin/java java /usr/java/jdk-17.0.5+8/bin/java 2
-
输入命令,查看并选择JDK版本
update-alternatives --config java
-
这里选择的是JDK 17:
-
意外的是,输入
java -version
,仍然显示JDK 8。甚至尝试将/etc/profile
中JDK相关配置都注释掉,仍然未能成功切换到JDK 17
-
最后怕影响使用,不得不删除通过
update-alternatives
创建的软链接update-alternatives --remove java /usr/java/jdk1.8.0_192-amd64/bin/java update-alternatives --remove java /usr/java/jdk-17.0.5+8/bin/java
-
参考链接:Ubuntu 系统安装多个版本的 JDK ,只参考了如何通过
update-alternatives
管理多版本JDK
2.2 失败原因猜测
-
后来查阅大量资料后发现,仍百思不得其解
-
笔者甚至基于某些成功实例的JDK是通过Linux命令安装的,大胆推测:只有通过Linux命令安装JDK,才能使用
update-alternatives
进行管理yum install java-11-openjdk -y
-
加以佐证上述猜测的成功实例:
- Java - How to install and manage multiple Java versions on Linux
- INSTALL AND MANAGE MULTIPLE JAVA JDK AND JRE VERSIONS ON UBUNTU 20.04
- 如何在CentOS 7安装Java
-
不过冷静下来一想,人家还有手动安装的成功实例 😂
- Linux 安装多个版本JDK并设置默认版本
- Linux安装JDK并配置多个JDK切换
-
自己猜测:
-
可能是因为创建软链接的命令没写对,
/usr/bin/java
在公司的服务器中可能是其他值update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_192-amd64/bin/java 1
-
公司使用的centos系统可能有做什么限制,导致无法实现切换
-
原本的JDK 8是公司系统运维帮忙安装的,即使不设置
JAVA_HOME
也能成功调用,可能这里面有什么玄机
-
-
欢迎各位大佬与自己交流:为什么创建软链接失败,如何更好地管理多个版本的JDK,都可以~