centos7安装 jdk8
、jdk11
oracle官网下载jdk到本地,上传到服务器
# 本地机器上执行
scp jdk-8u202-linux-x64.tar.gz root@ip:
scp jdk-11.0.22_linux-x64_bin.tar.gz root@ip:
# 服务器接收到文件后,创建目录,解压缩
cd /usr
mkdir java
cd java
tar zxvf jdk-8u202-linux-x64.tar.gz -C jdk1.8.0_202
tar zxvf jdk-11.0.22_linux-x64_bin.tar.gz -C jdk-11.0.22
卸载openjdk
# 看下openjdk
rpm -qa|grep jdk
java-1.8.0-openjdk-headless-1.8.0.402.b06-1.el7_9.x86_64
java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64
java-1.8.0-openjdk-devel-1.8.0.402.b06-1.el7_9.x86_64
# 挨个卸载
yum -y remove java-1.8.0-openjdk-headless-1.8.0.402.b06-1.el7_9.x86_64
yum -y remove java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64
yum -y remove java-1.8.0-openjdk-devel-1.8.0.402.b06-1.el7_9.x86_64
配置文件 vim /etc/profile
export JAVA_8_HOME=/usr/java/jdk1.8.0_202
#export PATH=$JAVA_HOME/bin:$PATH
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_11_HOME=/usr/java/jdk-11.0.22
# 配置alias命令动态切换JDK版本
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk11='export JAVA_HOME=$JAVA_11_HOME'
export JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
切换版本
[root@iZ2zeb6gTedccear1uvxopa bin]# jdk11
[root@iZ2zeb6gTedccear1uvxopa bin]# source /etc/profile
[root@iZ2zeb6gTedccear1uvxopa bin]# java -version
java version "11.0.22" 2024-01-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)
[root@iZ2zeb6gTedccear1uvxopa bin]# javac -version
javac 11.0.22
[root@iZ2zeb6gTedccear1uvxopa bin]# jdk8
[root@iZ2zeb6gTedccear1uvxopa bin]# source /etc/profile
[root@iZ2zeb6gTedccear1uvxopa bin]# 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@iZ2zeb6gTedccear1uvxopa bin]# javac -version
javac 1.8.0_202
[root@iZ2zeb6gTedccear1uvxopa bin]#
使用alternatives
管理多个jdk版本的切换
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_202/bin/java 3008
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_202/bin/javac 3008
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/jar jar /usr/java/jdk1.8.0_202/bin/jar 3008
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/javap javap /usr/java/jdk1.8.0_202/bin/javap 3008
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/jconsole jconsole /usr/java/jdk1.8.0_202/bin/jconsole 3008
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/jshell jshell /usr/java/jdk1.8.0_202/bin/jshell 3008
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --list
java auto /usr/java/jdk1.8.0_202/bin/java
jar auto /usr/java/jdk1.8.0_202/bin/jar
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
jconsole auto /usr/java/jdk1.8.0_202/bin/jconsole
jshell auto /usr/java/jdk1.8.0_202/bin/jshell
print auto /usr/bin/lpr.cups
javac auto /usr/java/jdk1.8.0_202/bin/javac
pax auto /usr/bin/spax
javap auto /usr/java/jdk1.8.0_202/bin/javap
ld auto /usr/bin/ld.bfd
servlet auto /usr/share/java/tomcat-servlet-3.0-api.jar
mta auto /usr/sbin/sendmail.postfix
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --list | grep java
java auto /usr/java/jdk1.8.0_202/bin/java
jar auto /usr/java/jdk1.8.0_202/bin/jar
jconsole auto /usr/java/jdk1.8.0_202/bin/jconsole
jshell auto /usr/java/jdk1.8.0_202/bin/jshell
javac auto /usr/java/jdk1.8.0_202/bin/javac
javap auto /usr/java/jdk1.8.0_202/bin/javap
servlet auto /usr/share/java/tomcat-servlet-3.0-api.jar
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/java java /usr/java/jdk-11.0.22/bin/java 3011
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/javac javac /usr/java/jdk-11.0.22/bin/javac 3011
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/jar jar /usr/java/jdk-11.0.22/bin/jar 3011
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/javap javap /usr/java/jdk-11.0.22/bin/javap 3011
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/jconsole jconsole /usr/java/jdk-11.0.22/bin/jconsole 3011
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --install /usr/bin/jshell jshell /usr/java/jdk-11.0.22/bin/jshell 3011
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --list
java auto /usr/java/jdk-11.0.22/bin/java
jar auto /usr/java/jdk-11.0.22/bin/jar
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
jconsole auto /usr/java/jdk-11.0.22/bin/jconsole
jshell auto /usr/java/jdk-11.0.22/bin/jshell
print auto /usr/bin/lpr.cups
javac auto /usr/java/jdk-11.0.22/bin/javac
pax auto /usr/bin/spax
javap auto /usr/java/jdk-11.0.22/bin/javap
ld auto /usr/bin/ld.bfd
servlet auto /usr/share/java/tomcat-servlet-3.0-api.jar
mta auto /usr/sbin/sendmail.postfix
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --list | grep java
java auto /usr/java/jdk-11.0.22/bin/java
jar auto /usr/java/jdk-11.0.22/bin/jar
jconsole auto /usr/java/jdk-11.0.22/bin/jconsole
jshell auto /usr/java/jdk-11.0.22/bin/jshell
javac auto /usr/java/jdk-11.0.22/bin/javac
javap auto /usr/java/jdk-11.0.22/bin/javap
servlet auto /usr/share/java/tomcat-servlet-3.0-api.jar
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --display java
java - 状态为自动。
链接当前指向 /usr/java/jdk-11.0.22/bin/java
/usr/java/jdk1.8.0_202/bin/java - priority 3008
/usr/java/jdk-11.0.22/bin/java - priority 3011
当前“最佳”版本是 /usr/java/jdk-11.0.22/bin/java。
[root@iZ2zeb6gTedccear1uvxopa java]#
既有环境变量,又使用了alternatives --install
后,使用alternatives --config java
切换
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
1 /usr/java/jdk1.8.0_202/bin/java
*+ 2 /usr/java/jdk-11.0.22/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:1
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 1.8.0_202
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 1.8.0_202
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
+ 1 /usr/java/jdk1.8.0_202/bin/java
* 2 /usr/java/jdk-11.0.22/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:2
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 1.8.0_202
[root@iZ2zeb6gTedccear1uvxopa java]# 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@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
使用jdk8、jdk11配置文件强制覆盖
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]# jdk11
[root@iZ2zeb6gTedccear1uvxopa java]# source /etc/profile
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 11.0.22
[root@iZ2zeb6gTedccear1uvxopa java]# java -version
java version "11.0.22" 2024-01-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)
[root@iZ2zeb6gTedccear1uvxopa java]#
#注释掉配置文件
vim /etc/profile
#export JAVA_8_HOME=/usr/java/jdk1.8.0_202
##export PATH=$JAVA_HOME/bin:$PATH
##export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#export JAVA_11_HOME=/usr/java/jdk-11.0.22
## 配置alias命令动态切换JDK版本
#alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
#alias jdk11='export JAVA_HOME=$JAVA_11_HOME'
#export JAVA_HOME
#export PATH=$JAVA_HOME/bin:$PATH
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#wq回车退出
source /etc/profile
真的生效了吗(不改优先级,就一直是优先级高的版本,这里就是11)
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
1 /usr/java/jdk1.8.0_202/bin/java
*+ 2 /usr/java/jdk-11.0.22/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:1
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 11.0.22
[root@iZ2zeb6gTedccear1uvxopa java]# java -version
java version "11.0.22" 2024-01-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
+ 1 /usr/java/jdk1.8.0_202/bin/java
* 2 /usr/java/jdk-11.0.22/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:2
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 11.0.22
[root@iZ2zeb6gTedccear1uvxopa java]# java -version
java version "11.0.22" 2024-01-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]#
[root@iZ2zeb6gTedccear1uvxopa java]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
1 /usr/java/jdk1.8.0_202/bin/java
*+ 2 /usr/java/jdk-11.0.22/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:1
[root@iZ2zeb6gTedccear1uvxopa java]# java -version
java version "11.0.22" 2024-01-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)
[root@iZ2zeb6gTedccear1uvxopa java]# javac -version
javac 11.0.22
[root@iZ2zeb6gTedccear1uvxopa java]#
在 alternatives 中,优先级(priority)决定了备选项的顺序,值越小优先级越高。所以,如果你想指定使用低的优先级,只需要为该备选项设置一个较大的优先级即可。
举个例子,假设你有两个备选项 A 和 B,A 的优先级为 1,B 的优先级为 2,那么在默认情况下,系统会选择 B。如果你想要系统选择 A,你需要将 A 的优先级设为比 B 更高的值,比如:
sudo alternatives --install /usr/bin/java java /path/to/A/bin/java 10
sudo alternatives --install /usr/bin/javac javac /path/to/A/bin/javac 10
这样,A 就会被设置为默认备选项,除非你手动切换到 B。
思考下,每次手动调整优先级费不费时
alternatives管理切换要做的事,并且只对这一个命令有效果
alternatives --display java
alternatives --remove java /usr/java/jdk1.8.0_202/bin/java
alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_202/bin/java 3108
配置文件别名指令切换并且重载 source /etc/profile
jdk8
source /etc/profile
jdk11
source /etc/profile
同时配置,结果是配置文件的效果,没用到alternatives
1、感觉alternatives管理多个版本指令确实有点用。
2、每次操作时可能只需要调整一次当前指令的版本,看一下优先级,改一下,不需要编辑文件。
3、配置文件,变更,不过这里有别名指令,看起来这个更好用一点