-->

Linux下多java版本共存与切换

1. 切换java版本

使用 update-alternatives 建立主链接:

update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_281/bin/java 200

之后,使用 -- 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-amd64/bin/java   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

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

后面的数字越大,默认自动模式下越优先。输入要切换到的 Java 版本的编号,然后按下 Enter 键,系统就会切换到你选择的 Java 版本作为默认版本。

2. 建立链接组

我们已经可以为不同版本的 java 二进制文件建立对应的链接,并在需要时手动切换。但是这很麻烦,一般我们不止使用某一个单独的 /java/bin 下的文件,我们更希望可以一次性安装和切换所有的 Java 二进制文件进行编译和运行,这就需要使用 update-alternatives 命令的 --slave(从属)选项。

--slave 选项允许将多个相关联的二进制文件(如 javac, jar, javap 等)绑定到一个主链接(Master Link)上,形成一个链接组 (Link Group)。当切换主链接的版本时,所有从属链接也会自动切换到相应版本的路径。

这行命令就是在设置主链接:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_281/bin/java 200

现在,为每个需要同步切换的二进制文件添加一个或多个 --slave 选项来建立链接组。

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_281/bin/java 200 \
    --slave /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_281/bin/javac \
    --slave /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_281/bin/jar \
    --slave /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.8.0_281/bin/javadoc \
    --slave /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_281/bin/javap
# 可以根据需要添加所有其他 Java/JDK 二进制文件,如 jconsole, jdb, keytool 等。

--slave 选项的语法:

--slave <从属链接路径> <从属链接名> <从属实际文件路径>

注意: --slave 选项不需要再次指定优先级,因为它会继承主链接的优先级。

如果安装了多个版本的 Java(例如,另一个是 OpenJDK 17),并且它们都以相同的链接组名(java)通过 --slave 选项安装,那么现在只需配置主链接即可:

sudo update-alternatives --config java

当从列表中选择一个新的 Java 版本时,javacjar 等所有从属命令将同时切换到该版本。

输入以下命令查询对应链接组:

sudo update-alternatives --display java

查看所有已配置的链接组:

update-alternatives --get-selections

删除链接:

sudo update-alternatives --remove java /usr/lib/jvm/jdk1.8.0_471/bin/java

使用 --remove 移除主链接的一个版本时,所有通过 --slave 选项与该版本关联的从属链接(如 javac, jar 等)也会自动从该链接组中移除。

posted @ 2025-12-15 14:31  Merakii  阅读(75)  评论(0)    收藏  举报