前言
其实JDK8用的好好的,但是有的程序升级后,只支持JDK11以上;
刚好JDK17也是一个长期免费版本,所以干脆一次性升级到JDK17,先用着,等有问题再说;
不过为了保险,我们不卸载旧的JDK8,这样当有问题时可以直接切换过来;
切换的方法是 alternatives
命令,下面会介绍
目录
-
检查当前Java版本
-
安装jdk17
-
配置多个Java版本
正文
1. 检查当前Java版本
先查看当前的版本号:java -version
[root@iZ25rlowqlfZ ~]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
可以看到,当前是1.8;
接着查看Java所在的目录:which java
[root@iZ25rlowqlfZ ~]# which java
/root/java/jdk1.8/bin/java
最后查看 Java 的相关配置:vim /etc/profile
export JAVA_HOME=/root/java/jdk1.8
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
2. 安装jdk17
先下载新版JDK17,下载命令::wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
;
这里我们下载到/root/java/
目录;
下载完成后,解压到当前目录:tar -zxvf
解压时会自动创建一个jdk17目录,此时的jdk17的完整目录为:/root/java/jdk-17.0.2
[root@iZ25rlowqlfZ jdk-17.0.2]# pwd
/root/java/jdk-17.0.2
3. 配置多个Java版本
这里我们就用开头提到的alternatives命令进行配置,该命令常用于配置一个软件的多个版本;
先看下 alternatives 命令的说明:alternatives
[root@iZ25rlowqlfZ ~]# alternatives
alternatives version 1.3.49.5 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.
usage: alternatives --install <link> <name> <path> <priority>
[--initscript <service>]
[--slave <link> <name> <path>]*
alternatives --remove <name> <path>
alternatives --auto <name>
alternatives --config <name>
alternatives --display <name>
alternatives --set <name> <path>
common options: --verbose --test --help --usage --version
--altdir <directory> --admindir <directory>
其中
- –install 就是用来添加多个版本,具体参数下面会说明
- –config 用来配置某一个版本
我们先把jdk1.8和jdk17都添加进来:
[root@iZ25rlowqlfZ ~]# alternatives --install /usr/bin/java java /root/java/jdk1.8/bin/java 1
[root@iZ25rlowqlfZ ~]# alternatives --install /usr/bin/java java /root/java/jdk-17.0.2/bin/java 2
link
: 就是命令的快捷方式,比如/usr/bin/java
name
:命令的名字,比如java
path
:命令的真实路径,比如/root/java/jdk1.8/bin/java
priority
: 优先级,用来设置优先级,比如上面的1和2,就表示我们默认想用1.8,第二才是jdk17
但是因为添加的同时会配置当前路径为默认路径,所以虽然后面的jdk17优先级为2,但是因为后添加的,所以默认Java为jdk17版本
此时运行配置命令,可以看到jdk17为默认选中的版本(+表示当前选中的版本):alternatives --config java
[root@iZ25rlowqlfZ ~]# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 /root/java/jdk1.8/bin/java
*+ 2 /root/java/jdk-17.0.2/bin/java
问题来了,输入java -version
发现还是jdk8版本;
原因是因为之前/etc/profile中的PATH配置覆盖了这里的alternatives配置;
可以通过echo $PATH
查看当前的环境变量;
解决办法:就是删除掉/etc/profile中的配置,如下所示,将相关PATH注释掉
#export JAVA_HOME=/root/java/jdk1.8
#export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
#export PATH=$JAVA_HOME/bin:$PATH
接着运行 source /etc/profile
,使其生效;
结果问题又来了,输入java -version
发现还是jdk8版本;
原因是通过/etc/profile修改环境变量时,如果是新增变量,则source /etc/profile
可以直接生效;
但是如果要删除,则需要重启shell,即关闭命令窗口,重新打开;
重启shell后,再次输入java -version
就可以看到,已经切换到jdk17了;
[root@iZ25rlowqlfZ ~]# java -version
java version "17.0.2" 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
总结
升级时有两个点需要注意:
- alternatives配置版本时,如果不生效,则可能是因为之前配置过
$PATH
,需删掉之前的环境变量配置$PATH
- 通过
/etc/profile
修改环境变量时,如果是新增变量,则source /etc/profile
即可生效,但是如果是删除变量,则需要source /etc/profile
+重启shell窗口
评论区