Linux 中jdk多版并存
有时候系统中需要多个jdk版本共存,我们在做特定的操作时需要特定的版本;比如打包项目A时使用的是jdk8,打包项目B时使用的是jdk17;这个时候我们就需要不停的在两个jdk环境之间切换;这里就要用到alternatives 来管理我们的jdk版本;
-
首先去官网下载对应的jdk安装包;
-
解压
-
配置环境变量;如果之前已经有一个jdk版本,现在需要再加第二个版本,那就不用配置环境变量了,环境变量中的版本就当作默认版本;
-
接下来就是使用alternatives来管理jdk版本了
alternatives使用方式
usage: alternatives --install
[–initscript ]
[–family ]
[–slave]*
alternatives --remove
alternatives --auto
alternatives --config
alternatives --display
alternatives --set
alternatives --listcommon options: --verbose --test --help --usage --version --keep-missing
–altdir --admindir
配置alternatives
-- 配置jdk1.8
# alternatives --install /usr/bin/java java /home/java/jdk1.8/bin/java 1
-- 最后的1是自定义的序号,倒数第二个参数是解压后的java命令地址
-- 配置jdk17,java地址改为jdk17地址,序号变为2;有几个版本,这里的序号可以依次递增
# alternatives --install /usr/bin/java java /home/java/jdk17/bin/java 2
上面的序号我们之后改变环境的时候会用到
查看当前版本
有时候我们使用java --version出来的java版本跟我们在配置文件里配置的不一样,我们可以使用以下方式查看当前的java版本
# which java
/bin/java
# ls -l /bin/java
lrwxrwxrwx 1 root root 22 Mar 25 20:53 /bin/java -> /etc/alternatives/java
# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Apr 7 09:07 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java
最后/etc/alternatives/java软连接对应的java就是我们当前正在使用的java
切换版本
交互方式 手动切换:update-alternatives --config java
# update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-arm64/bin/java 1111 auto mode
* 1 /usr/lib/jvm/java-11-openjdk-arm64/bin/java 1111 manual mode
2 /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java to provide /usr/bin/java (java) in manual mode
# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
使用 --config java切换版本时,update-alternatives会列出当前已配置的所有版本的java;我们需要手动输入序号进行选择;这是一种交互方式,需要手动输入;有时候我们需要写脚本进行切换,这个时候也可以选择非交互方式进行切换
非交互方式 脚本切换:update-alternatives --set java
# update-alternatives --set java /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java
update-alternatives: using /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java to provide /usr/bin/java (java) in manual mode
# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)