ubuntu下优雅的切换任何软件版本,比如切换JDK版本

Posted 境悟初

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu下优雅的切换任何软件版本,比如切换JDK版本相关的知识,希望对你有一定的参考价值。

本次使用的ubuntu系统版本为 20.04. 很多博客都提到优雅的切换JDK版本,但实际上可以更近一步,实现所有软件多版本的优雅切换。

$ uname -a
Linux jack-f1 5.11.0-44-generic #48~20.04.2-Ubuntu SMP Tue Dec 14 15:36:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

先来看JDK的安装和多版本切换。

安装Open-JDK

首先,安装多个版本的JDK:(ubuntu20.04默认安装的是JDK11)
查看下当前支持的JDK版本:

安装JDK8:

$ sudo apt install openjdk-8-jdk

切换JDK

然后使用 update-alternatives --config java切换

jack@jack-f1:~$ java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode)

jack@jack-f1:~$ sudo update-alternatives --config java
有 2 个候选项可用于替换 java (提供 /usr/bin/java)。

  选择       路径                                          优先级  状态
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      自动模式
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      手动模式
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:2
update-alternatives: 使用 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 来在手动模式中提供 /usr/bin/java (java)

jack@jack-f1:~$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

继续

一般到这里就可以结束了,这也是大多数人的做法。
但是,我们只需要稍微问一下,update-alternatives是干什么的?为什么可以切换JDK版本?只能切换JDK吗?
没错,这就是思考了。

开源系统由于版权问题无法直接引用Oracle JDK,但一般来说OpenJDK足够使用了。不过,有时必须得配置成OracleJDK,能不能像上面一样优雅的切换呢?

当然可以。

强大且简单的update-alternatives

使用man命令可以知道 update-alternatives这个命令和具体软件无关,只是个符号连接的切换工具。既然能实现java命令的切换,也可以实现其他的。

$ update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>

命令:
  --install <链接> <名称> <路径> <优先级>
    [--slave <链接> <名称> <路径>] ...
                           在系统中加入一组候选项。
  --remove <名称> <路径><名称> 替换组中去除 <路径> 项。
  --remove-all <名称>      从替换系统中删除 <名称> 替换组。
  --auto <名称><名称> 的主链接切换到自动模式。
  --display <名称>         显示关于 <名称> 替换组的信息。
  --query <名称>           机器可读版的 --display <名称>.
  --list <名称>            列出 <名称> 替换组中所有的可用候选项。
  --get-selections         列出主要候选项名称以及它们的状态。
  --set-selections         从标准输入中读入候选项的状态。
  --config <名称>          列出 <名称> 替换组中的可选项,并就使用其中
                           哪一个,征询用户的意见。
  --set <名称> <路径><路径> 设置为 <名称> 的候选项。
  --all                    对所有可选项一一调用 --config 命令。

<链接> 是指向 /etc/alternatives/<名称> 的符号链接。
    (如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。
    (如 pager)
<路径> 是候选项目标文件的位置。
    (如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。

使用非常简单,我们只需要再安装一个Oracle JDK的引用就可以随意切换了。

sudo update-alternatives --install /usr/bin/java java /usr/share/oracle-jdk8/bin/java 1 

然后再切换就容易了:

总结

是不是感觉这么简单功能很实用?
平时用windows,也有相关环境变量的切换工具。不过还是linux简单方便。

以上是关于ubuntu下优雅的切换任何软件版本,比如切换JDK版本的主要内容,如果未能解决你的问题,请参考以下文章

在Ubuntu中通过update-alternatives切换软件版本

Ubuntu 下 Java 版本的切换

Ubuntu下切换Python2和Python3

gcc/g++多版本切换 (ubuntu18.04)

Ubuntu下python两个版本的切换

sh Ubuntu的下切换程序的不同版本