Linux多版本JDK切换

一台机器上经常存在多个版本的JDK,如何方便的切换呢?Linux的alternatives命令完美地解决了这个问题。

# Ubuntu
update-alternatives

# CentOS
alternatives

不同Linux版本上命令名有所不同,但用法完全一样,下面以Ubuntu进行演示。

注册JDK相关命令

机器上除了自带的OpenJDK,还有一个我自己下载的JDK1.8

# update-alternatives --install <link_path> <name> <command_path> <priority>
# priority:数值越大优先级越高。当优先级为当前最大时,alternatives自动选择其为默认命令
sudo update-alternatives --install /usr/bin/java java /home/leo/jdk8/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /home/leo/jdk8/bin/javac 1
sudo update-alternatives --install /usr/bin/jar java /home/leo/jdk8/bin/jar 1

# 查看一下 /usr/bin
ls -al | grep java
# 效果如下
lrwxrwxrwx 1 root root 22 11月 13 2015 java -> /etc/alternatives/java
lrwxrwxrwx 1 root root 23 11月 13 2015 javac -> /etc/alternatives/javac

手动配置默认JDK相关命令

# update-alternatives --config <command_name>
sudo 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-7-openjdk-amd64/jre/bin/java 1071 auto mode
* 1 /usr/lib/jvm/jdk8/bin/java 1 manual mode

Press enter to keep the current choice[*], or type selection number: 1

# 同上配置javac、jar命令即可

检查是否切换成功

java -version

java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

tips

说白了alternatives就是创建了一个一个的软链接,并对软链接提供了方便的管理功能。

手滑了就鼓励一下吧~