侧边栏壁纸
  • 累计撰写 94 篇文章
  • 累计创建 100 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

Centos6.5升级JDK17

汤圆学Java
2022-05-20 / 0 评论 / 0 点赞 / 276 阅读 / 3,136 字
温馨提示:
本文最后更新于 2022-05-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

其实JDK8用的好好的,但是有的程序升级后,只支持JDK11以上;

刚好JDK17也是一个长期免费版本,所以干脆一次性升级到JDK17,先用着,等有问题再说;

不过为了保险,我们不卸载旧的JDK8,这样当有问题时可以直接切换过来;

切换的方法是 alternatives 命令,下面会介绍

目录

  1. 检查当前Java版本

  2. 安装jdk17

  3. 配置多个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/目录;

image-20220414172056349

下载完成后,解压到当前目录:tar -zxvf

image-20220414172242421

解压时会自动创建一个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)

总结

升级时有两个点需要注意:

  1. alternatives配置版本时,如果不生效,则可能是因为之前配置过$PATH,需删掉之前的环境变量配置$PATH
  2. 通过/etc/profile修改环境变量时,如果是新增变量,则source /etc/profile即可生效,但是如果是删除变量,则需要source /etc/profile+重启shell窗口
0

评论区