Linux系统下使用update-alternatives进行行Java多版管理和切换
在 Linux 环境下,有多种工具(update-alternatives/alternatives、sdkman、jenv等)可以帮助开发人员管理和切换安装的应用多个版本。下面介绍一种 Java 应用的多版本管理和切换工具 update-alternatives/alternatives。
update-alternatives 和 alternatives
update-alternatives 是 Linux 系统自带的一个工具,用于管理系统中的多个应用程序版本。对于 Java 来说,update-alternatives 可以设置默认的 JDK 版本,用户可以通过它来切换不同的 Java 版本。
update-alternatives 最初在 Debian Linux 下开发的项目,用于管理多版本软件。RHEL 重写了这个项目,并将其命名为 alternatives,在基于Fedora的分发版本中发行和传播。
update-alternatives 主要用于 Debian 及其衍生系统(如 Ubuntu 等)。
alternatives 通常在基于 Fedora 的分发版本中使用,如 Red Hat、Fedora、CentOS 等,在某些 RHEL 或 CentOS 版本中,update-alternatives 可能作为一个软链接存在,指向 alternatives 命令。
update-alternatives 和 alternatives 两者用法相同。
使用 update-alternatives 设置 Java 版本:
如果希望将 Java 切换到新安装的 Java 版本,前提是需要确保该版本 Java 已被 alternatives 系统识别。因安装方式不同而有差异:有的 Java 安装方式会自动添加到 alternatives 系统中,有的手动安装方式则不会添加。
如果还没有添加到 alternatives 系统中,则可以执行命令手动添加新安装的 Java 到 alternatives 系统中。
执行 update-alternatives --config java 命令可查看已经添加到 alternatives 系统中的所有 java 应用版本。
执行 update-alternatives --display java 命令可以看到更多信息、包括优先级。
假设系统中已安装了两个不同版本的Java版本(安装在 /usr/lib/jvm/ 目录下),如果还没有添加到 alternatives 系统,则可以使用以下命令将其添加到 update-alternatives 系统中:
语法:
usage: alternatives --install <link> <name> <path> <priority>
[--initscript <service>]
[--family <family>]
[--slave <link> <name> <path>]*
alternatives --remove <name> <path>
alternatives --auto <name>
alternatives --config <name>
alternatives --display <name>
alternatives --set <name> <path>
alternatives --list
查看已添加的(可查看优先级等详细信息):
update-alternatives --display java
添加到 alternatives 系统:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0/bin/java 1000
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11/bin/java 2000
update-alternatives --config java
命令最后的100和200是指定的优先级,优先级决定了在调用 java 命令时默认使用的版本。
使用 update-alternatives 进行 Java 版本切:
update-alternatives --config java
执行此命令后,如果系统有多版本、则会列出所有版本列表、提示你选择一个 Java 版本。输入对应版本编号并回车,即可完成java命令的默认版本切换。
update-alternatives 进行应用版本切换的原理:
实际上是切换的软连接,执行下面命令可查看版本切换后的软连接发生了变化:
ls -l /usr/bin/java && ls -l /etc/alternatives/java
或
ls -l /usr/bin/java* && ls -l /etc/alternatives/java*
查看当前使用的 Java 版本:
java -version
如果要从 alternatives 系统中删除 Java 版本,则执行:
alternatives --remove java /usr/lib/jvm/jdk1.8.0/bin/java
alternatives --remove java /usr/lib/jvm/jdk-11/bin/java
一般只需要对 java 命令进行多版本管理即可。java 相关命令比较多,有:java、javac、javadoc、javah、javap、javaws、jar、jmap 等等。如果除了 java 命令外,你还需要将其他命令也添加到 alternatives 系统中进行多版本管理和切换,则自己根据实际需求按需添加。
例如,如果要继续添加 javadoc :
update-alternatives --display javadoc
update-alternatives --config javadoc
update-alternatives --install /usr/bin/javadoc javadoc /usr/bin/java java /usr/lib/jvm/jdk1.8.0/bin/java 1000
update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk-11/bin/java 2000
切换 javadoc 版本:
update-alternatives --config javadoc
查看切换效果:
ls -l /usr/bin/javadoc && ls -l /etc/alternatives/javadoc
或
ls -l /usr/bin/java* && ls -l /etc/alternatives/java*