Skip to content

CentOS 安装 JDK 及切换默认 JDK 版本

alternatives 和 update-alternatives 貌似功能差不多,区别在于不同的 Linux 发行版。

根据官网的说法:

Starting with version 8u40, the JDK installation is integrated with the alternatives framework and after installation, the alternatives framework is updated to reflect the binaries from the recently installed JDK. Java commands such as java, javac, javadoc, and javap can be invoked from the command line.

因此,我们从 8u40 的版本以后,可以使用 alternatives 来切换 jdk 版本。

检查一下系统有没有自带 open-jdk(不介意多版本同时存在可忽略)

bash
# 查看默认 Java 版本
$ java -version

$ rpm -qa |grep java
$ rpm -qa |grep jdk
$ rpm -qa |grep gcj
# 如果安装可以使用下面命令批量卸载所有带有Java的文件:
$ rpm -qa | grep java | xargs rpm -e --nodeps

通过 yum 安装 OpenJDK

bash
# 检索1.8的列表
$ yum list java-1.8*
# 安装1.8.0的所有文件
$ yum install java-1.8.0-openjdk* -y
# 使用命令检查是否安装成功
$ java -version
# 到此安装结束了。这样安装有一个好处就是不需要对环境变量path进行设置,自动就设置好了

alternatives 切换系统默认的 JDK 版本

为了演示,再安装一个 java11 版本

bash
# 检索 java11 的列表
$ yum list java-11*
# 安装 java11 的所有文件
$ yum install java-11-openjdk* -y

alternatives 切换到 java 11

bash
# 查看目前默认的 java 版本,显示的是 java 8 的版本
$ java -version

# 接下来切换到 Java 11
[root@vm ~]# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64/jre/bin/java)
   2           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el7_9.x86_64/bin/java)

# 此处按键盘上的数字 2 即可。(同理,如果要切换到 java 8,则按键盘上 java 8 对应的数字键即可,例如这里的java8对应数字1)
Enter to keep the current selection[+], or type selection number: 2
# 再次查看 java 版本
[root@vm ~]# java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.15+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.15+9-LTS, mixed mode, sharing)


# 安装多个可替换的 jdk 版本:比如要使用 oracle JDK 时
alternatives --install <link> <name> <path> <priority>
# 其中,
# install表示安装
# link是符号链接
# name则是标识符
# path是执行文件的路径
# priority则表示优先级

安装 oracle JDK 17

bash
# 下载安装包
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

# 解压到 /usr/lib/jvm 目录(-C 指定解压目录)
# tar -zxvf jdk-17_linux-x64_bin.tar.gz
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/lib/jvm

# 查看解压后的文件夹名称为:jdk-17.0.10
cd /usr/lib/jvm

# 优先级 1000
alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.10/bin/java 1000
# 如果需要 javac 命令的话(比如 maven 需要),执行下面命令:
alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17.0.10/bin/javac 1000
# 检查 javac 版本
javac -version

# 移除可用下面命令:
# alternatives --remove java /usr/lib/jvm/jdk-17.0.10/bin/java

# 接着就可以安装上面的步骤选择 java 17 为默认 jdk 版本了。
alternatives --config java

RPM 安装 oracle JDK 8

安装前可以先检查有没有默认 JDK, 有的话可以先卸载。

下载 JDK 8 最后一个免费版本:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

shell
[root@localhost ~]# su root
# 假设安装包在 /opt 目录下
[root@localhost opt]# cd /opt

[root@localhost opt]# rpm -ivh jdk-8u202-linux-x64.rpm
warning: jdk-8u202-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8-2000:1.8.0_202-fcs        ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
# 无需配置环境变量就可以使用 java 或 javac 命令
[root@localhost opt]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
[root@localhost opt]#

配置 JAVA_HOME (可选)

shell
# 查找安装位置
[root@localhost opt]# find / -name java
/etc/pki/ca-trust/extracted/java
/etc/pki/java
/etc/alternatives/java
/var/lib/alternatives/java
/usr/bin/java
/usr/java
/usr/java/jdk1.8.0_202-amd64/bin/java
/usr/java/jdk1.8.0_202-amd64/jre/bin/java
[root@localhost opt]#
# 发现在 /usr/java/jdk1.8.0_202-amd64/ 目录下。如果配置 JAVA_HOME 就用这个路径。
# 同时也发现有 alternatives,如果有多个版本就可以根据这个去切换不同版本。

[root@localhost opt]# vim /etc/profile

在文件最后添加如下内容后保存退出:

text
export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64/
export PATH=$PATH:$JAVA_HOME/bin
shell
# 刷新环境变量
[root@localhost opt]# source /etc/profile

[root@localhost opt]# echo $JAVA_HOME

[root@localhost opt]# echo $PATH

RPM 卸载 JDK

shell
 # 检查 JDK 版本信息
[root@localhost ~]# rpm -qa|grep jdk
jdk1.8-1.8.0_202-fcs.x86_64

 # 删除 JDK, 最后面的参数是上面查出来的
[root@localhost ~]# rpm -e --nodeps jdk1.8-1.8.0_202-fcs.x86_64

卸载其他软件同理。