linux环境动态切换jdk版本

在Linux系统中,可以使用alternatives命令来便捷地切换不同版本的JDK。首先,将JDK的不同版本解压到同一目录下,然后通过alternatives命令进行安装、配置、显示和删除操作。此外,还可以通过设置环境变量的方式实现版本切换,但这种方法仅适用于java命令,其他相关命令可能无效。如果系统中没有alternatives命令,可以自定义脚本来模拟其功能。
摘要由CSDN通过智能技术生成

linux环境动态切换jdk版本

很多时候我们需要不同的jdk环境,那就会有一个问题。如何动态切换jdk版本呢?

方法1 alternatives命令

nodejs有nvm,但是jdk没有这样的工具。 但是没想到linux系统本身就带了一个类似版本切换的工具。

使用步骤

解压jdk的安装包到同一个目录下,如

[root@6791a42bf857 data]# ll
total 16
drwxr-xr-x 8 root root 4096 Jan 25 11:26 jdk-11.0.11
drwxr-xr-x 8 root root 4096 Jan 25 11:27 jdk-17.0.2
drwxr-xr-x 8   10  143 4096 Jul 22  2017 jdk1.8.0_144
[root@6791a42bf857 data]#
[root@6791a42bf857 data]# alternatives --help
alternatives version 1.3.61 - 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>    # 非交互配置某个版本
       alternatives --list				   # 列出所有的配置

common options: --verbose --test --help --usage --version
                --altdir <directory> --admindir <directory>
[root@6791a42bf857 data]#

alternatives --install安装版本

[root@6791a42bf857 data]# alternatives --install /usr/bin/java java /data/jdk-11.0.11/bin/java 2
[root@6791a42bf857 data]#
[root@6791a42bf857 data]# alternatives --config  java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /data/jdk1.8.0_144/bin/java
[root@6791a42bf857 data]# alternatives --install /usr/bin/java java /data/jdk-11.0.11/bin/java 2
[root@6791a42bf857 data]#
[root@6791a42bf857 data]#
[root@6791a42bf857 data]# alternatives --install /usr/bin/java java /data/jdk-17.0.2/bin/java 3
[root@6791a42bf857 data]#
[root@6791a42bf857 data]#
[root@6791a42bf857 data]#
[root@6791a42bf857 data]# alternatives --config  java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /data/jdk1.8.0_144/bin/java
   2           /data/jdk-11.0.11/bin/java
*  3           /data/jdk-17.0.2/bin/java

alternatives --config配置版本

[root@6791a42bf857 data]# alternatives --config  java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /data/jdk1.8.0_144/bin/java
   2           /data/jdk-11.0.11/bin/java
*  3           /data/jdk-17.0.2/bin/java

Enter to keep the current selection[+], or type selection number: 3
[root@6791a42bf857 data]# alternatives --config  java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /data/jdk1.8.0_144/bin/java
   2           /data/jdk-11.0.11/bin/java
*+ 3           /data/jdk-17.0.2/bin/java

Enter to keep the current selection[+], or type selection number:
[root@6791a42bf857 data]# java -version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

alternatives --display显示版本

[root@6791a42bf857 data]# alternatives --display java
java - status is auto.
 link currently points to /data/jdk-17.0.2/bin/java
/data/jdk1.8.0_144/bin/java - priority 1
/data/jdk-11.0.11/bin/java - priority 2
/data/jdk-17.0.2/bin/java - priority 3
Current `best' version is /data/jdk-17.0.2/bin/java.

alternatives --set 设置当前版本

[root@6791a42bf857 data]# alternatives --set java /data/jdk-11.0.11/bin/java
[root@6791a42bf857 data]# alternatives --display java
java - status is manual.
 link currently points to /data/jdk-11.0.11/bin/java
/data/jdk1.8.0_144/bin/java - priority 1
/data/jdk-11.0.11/bin/java - priority 2
/data/jdk-17.0.2/bin/java - priority 3
Current `best' version is /data/jdk-17.0.2/bin/java.
[root@6791a42bf857 data]#
[root@6791a42bf857 data]# echo 3 | alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /data/jdk1.8.0_144/bin/java
 + 2           /data/jdk-11.0.11/bin/java
*  3           /data/jdk-17.0.2/bin/java

Enter to keep the current selection[+], or type selection number: [root@6791a42bf857 data]#

alternatives --remove删除某个版本

[root@6791a42bf857 /]# alternatives --remove java /data/jdk-11.0.11/bin/java
[root@6791a42bf857 /]# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /data/jdk1.8.0_144/bin/java
*+ 2           /data/jdk-17.0.2/bin/java

方法2 alternatives设置环境变量

方法1的缺点:只能使用java命令,其他命令使用不了
方法2的思路:运维常用方法,软连接,其实和方法1一样

[root@6791a42bf857 /]# export JAVA_HOME=/data/java_home
[root@6791a42bf857 /]# export PATH=$JAVA_HOME/bin:$PATH
[root@6791a42bf857 /]#
[root@6791a42bf857 /]# alternatives --install /data/java_home java /data/jdk1.8.0_144 1
[root@6791a42bf857 /]#
[root@6791a42bf857 /]# java --version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
[root@6791a42bf857 /]# java -version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
[root@6791a42bf857 /]# alternatives --install /data/java_home java /data/jdk-17.0.2 2
[root@6791a42bf857 /]# java -version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
[root@6791a42bf857 /]#

方法3 没有alternatives命令

自己写一个脚本,类似alternatives的功能

结合gitlab-ci.yml的default.before_script这是默认的jdk环境。

https://docs.gitlab.com/ee/ci/yaml/index.html#before_script

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值