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

Linux安装管理多版本JDK

前言

在之前鄙人还是学生的时候,很老实的作为钉子户坚守 JDK8,但在后续学有小成之后,逐渐的开始尝试不同版本的 JDK,比如 11、17、21 以及未来可期的 24()。因此为了避免频繁的手动修改 Linux 的配置文件,便开始着手在海洋的知识里面找到了下面能让我偷懒的管理方式。

省流:使用 update-alternatives 命令进行管理,但对于要部署不同版本项目的需求人群来说,使用 Docker 做环境隔离相信会更合适

1、JDK下载&安装

对于下载安装相信各位在座的靓仔靓女都是会的,主流的方式多数为使用 yum instal等下载命令进行一键式安装下载,还有一种就是去官网下载对应的安装包自行解压安装。

通过深思熟虑之后,根据我的个人偏好(我安装的软件我做主)以及使用 update-alternatives命令管理(安装过程中不需要编写系统配置文件)等诸多原因,我选择第二种自行解压安装。

这里贴上解压命令,当然了也是为了鄙人我后续方便 CV,对于版本不做推荐,哪个顺眼用哪个:

cd /home/java
tar -zxvf jdk-11.0.18_linux-x64_bin.tar.gz
tar -zxvf jdk-8u351-linux-x64.tar.gz

2、配置版本管理

update-alternatives 命令是 Linux 系统中用于管理软件版本切换的工具,尤其适用于处理多个版本的软件共存的情况。该命令允许系统管理员或用户选择系统默认使用的软件版本,通过维护符号链接来实现不同版本之间的切换。

以上介绍来自于 AI 大聪明的回答,毕竟咱也是第一次遇到这命令

在自己的控制台中使用 update-alternatives --help 命令即可查看到对应的命令说明:

[root@localhost java]# update-alternatives --help
alternatives(备用)版本 1.7.6 - 版权 (C) 2001 红帽公司
在 GNU 公共许可条款下,本软件可被自由地重发行。

用法:update-alternatives --install <链接> <名称> <路径> <优先度>
                    [--initscript <服务>]
                    [--family <family>]
                    [--slave <链接> <名称> <路径>]*
       update-alternatives --remove <名称> <路径>
       update-alternatives --auto <名称>
       update-alternatives --config <名称>
       update-alternatives --display <名称>
       update-alternatives --set <名称> <路径>
       update-alternatives --list

common options: --verbose --test --help --usage --version --keep-missing
                --altdir <目录> --admindir <目录>

在配置之前最好查看一下自己使用的系统是否有对应的软链存在,如果存在可进行移除(后续追加应该也是可以的)

# 查看是否存在
update-alternatives --config java

# 如果存在查询结果如下
共有 2 个提供“java”的程序。

  选项    命令
-----------------------------------------------
 + 1           /home/java/jdk1.8.0_351/bin/java
*  2           /home/java/jdk-11.0.18/bin/java

# 逐一移除,下面的“命令地址”为上面查询出来的路径,如/home/java/jdk1.8.0_351/bin/java
update-alternatives --remove java 命令地址

# 删除完成后,查询判断是否还有存在
update-alternatives --config java

这个时候就可以愉快的进行配置多个版本的 JDK 咯,此处使用过的命令为 update-alternatives --install <链接> <名称> <路径> <优先度>,其中:

  • <链接> 是指向 /etc/alternatives/<名称> 的符号链接,如 /usr/bin/java
  • <名称> 是该链接替换组的主控名,如 java
  • <路径> 是候选项目标文件的位置,如 /home/java/jdk1.8.0_351/bin/java
  • <优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高
# 注意将 /home/java/jdk1.8.0_351/bin/java 修改成你服务器中 jdk 的路径
update-alternatives --install /usr/bin/java java /home/java/jdk1.8.0_351/bin/java 1
# 注意将 /home/java/jdk-11.0.18/bin/java 修改成你服务器中 jdk 的路径
update-alternatives --install /usr/bin/java java /home/java/jdk-11.0.18/bin/java 2

此时不出意外的话,使用 java -version命令后你应该可以看得到 jdk11 版本号的输出了,这是因为它的优先级是 2。

[root@localhost java]# java -version
java version "11.0.18" 2023-01-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.18+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.18+9-LTS-195, mixed mode)

当我们希望切换到其他版本时也很简单,使用 JDK8 为例:

# 使用方式命令的厂商已经教大家伙了
[root@localhost java]# update-alternatives --config java

共有 2 个提供“java”的程序。

  选项    命令
-----------------------------------------------
   1           /home/java/jdk1.8.0_351/bin/java
*+ 2           /home/java/jdk-11.0.18/bin/java

按 Enter 保留当前选项[+],或者键入选项编号:1

# 验证是否切换成功
[root@localhost java]# java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)

3、没遇到的坑

在查询管理版本的相关方法时,有看到过其它博主使用官网二进制安装包的方式无法成功切换版本,即设置不生效,但在我这边貌似没这个问题,嘎嘎顺畅,可能是因为我这个时新系统的问题,也有可能其他博主在他们的系统中操作了一些软链或配置导致 `update-alternatives` 命令无法正确设置,目前来看比较简单的解决方式就是使用 `yum install` 等安装命令进行一键安装 JDK。

同时相信大家伙都知道,这种方式配置的是全局的环境配置,对于玩耍或者学习的需求场景下更适合。如果希望在 Linux 系统中部署不同 JDK 版本的项目,相信手动指定 JDK 的路径或使用 Docker 进行环境隔离等方案更能够满足你们的需求。

搞定,猿神,启动!

4、参考资料

  • Linux安装JDK,并配置多个JDK切换
  • Linux上,多个JDK版本如何管理_linux多个jdk如何指定-CSDN博客

http://www.kler.cn/news/303581.html

相关文章:

  • CSS Clip-Path:重塑元素边界的艺术
  • mysql慢sql问题修复
  • 计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • qt操作excel(QAxObject详细介绍)
  • 论文解读《LaMP: When Large Language Models Meet Personalization》
  • 浏览器插件利器--allWebPluginV2.0.0.20-alpha版发布
  • 首批通过!华为云CodeArts Snap智能开发助手通过可信AI智能编码工具评估,获当前最高等级
  • 气膜体育馆:为学校打造智能化运动空间—轻空间
  • 响应式网站真的就只是多了一个媒体查询吗?
  • CSS学习17--CSS3 过渡、2D变形、3D变形、动画
  • linux 内核代码学习(九)--Linux内核启动和文件系统
  • MySQL 子查询
  • 计算几何学习
  • 【论文阅读】视觉分割新SOTA: Segment Anything(SAM)
  • C语言 | Leetcode C语言题解之第397题整数替换
  • CSS基本布局理解(测试)——WEB开发系列38
  • 静态和动态类型语言
  • Vue入门学习笔记-表单
  • 文本分类场景下微调BERT
  • 【MySQL】敏感数据加密后如何模糊查询?
  • HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题
  • Remix 学习 - 路由模块(Route Module)
  • 利用LM-Gaussian增强稀疏视图3D重建:利用大型模型先验实现高质量场景合成
  • ZoneTree: 高性能ACID兼容的.NET有序键值数据库
  • 使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误
  • 算法提高模板LCA
  • Unity Behavior Designe 可视化有限状态机(Composites篇)
  • Docker和Docker-compose
  • LSS如何创建视锥
  • HAL库学习梳理——UART