当前位置: 首页 > backend >正文

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*
 

http://www.xdnf.cn/news/9436.html

相关文章:

  • AJAX配置问题与解决方案指南
  • 24 数组基础与应用详解:定义(静态/VLA)、初始化、访问(有效/越界/内存调试)、遍历、大小端字节序
  • LockSupport与Condition解析
  • 操作系统精髓与设计原理(只讲大概的,例子讲的少,详细请看书)
  • 高效获取唯品会商品数据:API 接口开发与实时采集方案实现
  • QT布局综述
  • Flutter 实现6个验收码输入框
  • python多进程
  • 应用签名分发平台开发源码时数据储存是如何实现
  • vue3自定义指令来实现 v-focus 功能
  • LittleFS 小型文件系统(一)
  • HOW - 从0到1搭建自己的博客站点(三)
  • KV Cache:大模型推理加速的核心机制
  • shell脚本中的常用命令
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月27日第90弹
  • 【系分】论文模版
  • w笔记--Swagger
  • 开源即战力!从科研到商用:Hello Robot 移动操作机器人Stretch 3多模态传感融合(RGB-D/激光/力矩)控制方案
  • 仿真环境中机器人抓取与操作 - 上手指南
  • java常用工具类:实现文件下载
  • AD-PCB--电子设计学习思路 DAY 1
  • 从零到一:影刀RPA学习者的破局之路
  • 分布式系统中的消息幂等性与流量控制(一)
  • Vue组件技术全解析大纲
  • mediapipe标注视频姿态关键点(基础版加进阶版)
  • Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。
  • 【Elasticsearch】scripted_upsert
  • 小白成长之路-计算机网络(四)
  • BUG调试案例十二:LM5117输出电压纹波偏大问题案例
  • 初识 ProtoBuf