Linux上,多个JDK版本如何管理(交流贴)

news2025/1/11 2:40:25

1. 多个JDK版本面临的问题

  • 公司大多数业务都是用Oracle JDK 8,笔者做大数据查询引擎调研时,则需要使用JDK 17

  • 因此,需要在Linux服务器同时安装JDK 8和17,同时需要能智能地快速切换JDK版本,已使用不同的查询引擎需求

  • 公司内网限制,笔者选择手动安装Open JDK 17,通过修改/etc/profile配置JAVA_HOME

    export JAVA_HOME=/usr/java/jdk-17.0.5+8
    # export JAVA_HOME=/usr/java/jdk1.8.0_192-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
  • 从上面的配置可以看出,当笔者需要使用JDK 8时,则更新/etc/profile,注释掉JDK 17的JAVA_HOME

  • source /etc/profile后,可以让JDK 8重新生效,而JDK 17被禁用

  • 在笔者看来,这是一种解决方案,但笔者想知道是否还有更智能的解决方案

2. update-alternatives管理多个JDK版本

  • 通过查阅大量资料后发现,大家都比较推崇通过update-alternatives或者alternatives命令,实现多个JDK版本的管理

2.1 失败的实战

  • 按照网上教程,首先查看Linux服务器是否拥有JDK的软链接

    update-alternatives --config java
    
  • Linux服务器上没有JDK的软链接

  • 通过如下命令创建软链接

    update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_192-amd64/bin/java 1
    update-alternatives --install /usr/bin/java java /usr/java/jdk-17.0.5+8/bin/java 2
    
  • 输入命令,查看并选择JDK版本

    update-alternatives --config java
    
  • 这里选择的是JDK 17:

  • 意外的是,输入java -version,仍然显示JDK 8。甚至尝试将/etc/profile中JDK相关配置都注释掉,仍然未能成功切换到JDK 17

  • 最后怕影响使用,不得不删除通过update-alternatives创建的软链接

    update-alternatives --remove java /usr/java/jdk1.8.0_192-amd64/bin/java
    update-alternatives --remove java /usr/java/jdk-17.0.5+8/bin/java
    
  • 参考链接:Ubuntu 系统安装多个版本的 JDK ,只参考了如何通过update-alternatives管理多版本JDK

2.2 失败原因猜测

  • 后来查阅大量资料后发现,仍百思不得其解

  • 笔者甚至基于某些成功实例的JDK是通过Linux命令安装的,大胆推测:只有通过Linux命令安装JDK,才能使用update-alternatives进行管理

    yum install java-11-openjdk -y
    
  • 加以佐证上述猜测的成功实例:

    • Java - How to install and manage multiple Java versions on Linux
    • INSTALL AND MANAGE MULTIPLE JAVA JDK AND JRE VERSIONS ON UBUNTU 20.04
    • 如何在CentOS 7安装Java
  • 不过冷静下来一想,人家还有手动安装的成功实例 😂

    • Linux 安装多个版本JDK并设置默认版本
    • Linux安装JDK并配置多个JDK切换
  • 自己猜测:

    1. 可能是因为创建软链接的命令没写对,/usr/bin/java在公司的服务器中可能是其他值

      update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_192-amd64/bin/java 1
      
    2. 公司使用的centos系统可能有做什么限制,导致无法实现切换

    3. 原本的JDK 8是公司系统运维帮忙安装的,即使不设置JAVA_HOME也能成功调用,可能这里面有什么玄机

  • 欢迎各位大佬与自己交流:为什么创建软链接失败,如何更好地管理多个版本的JDK,都可以~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一致性哈希算法

如何分配请求? 大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。 但是问题来了,现在有那么多个节点(后面统称服务器为节点&#xf…

史上最详细sqlmap入门教程

最近做安全测试,遇到了SQL盲注的漏洞,从发现漏洞,确认漏洞,协助开发复现漏洞,验证漏洞一整套流程下来,有了亿点点收获,下面分享给大家,希望对软件测试同学有所启发,难度不…

ChatGPT原理简介

承接上文GPT前2代版本简介 GPT3的基本思想 GPT2没有引起多大轰动,真正改变NLP格局的是第三代版本。 GPT3训练的数据包罗万象,上通天文下知地理,所以它会胡说八道,会说的贼离谱,比如让你穿越到唐代跟李白对诗,不在一…

JavaScript如何实现上拉加载,下拉刷新?

一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中。本质上等同于PC网页中的分页,只是交互形式不同。开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等。这些第三方库使用起来非常便捷。我们通过原生的方式…

(13)ADDA

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号,ADC模拟-数字转换器 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换…

Spring MVC 框架

Spring MVC 框架 Spring MVC 简介Spring MVC 概述 Spring MVC入门案例案例步骤案例总结Bean 加载控制 请求与响应RequestMapping 设置请求路径请求参数五种类型参数传递普通参数POJO 数据类型嵌套POJO类型参数数组类型参数集合类型参数 JSON 数据传输参数日期类型参数传递响应 …

WPF MaterialDesign 初学项目实战(5):设计首页

原项目视频 WPF项目实战合集(2022终结版) 25P 其他内容 WPF MaterialDesign 初学项目实战(0):github 项目Demo运行 WPF MaterialDesign 初学项目实战(1)首页搭建 WPF MaterialDesign 初学项目实战(2)首页…

甲骨文云服务器 您无权访问任何应用程序?怎么办

背景 注册了甲骨文,登入是个难题,每次登入都这样显示 您无权访问任何应用程序 解决办法 因为我的服务器在于日本的大阪,每次登入链接即使采用书签的方法都会自动跳转到中国或者美国,所以是登入的连接错误了,我们需…

Mysql实现对某一字段排序并将排名写入另一字段

文章目录 前言一、数据库表结构和样例数据二、排名操作1.普通排名2.无间隔排名3.有间隔排名运行结果如图,我们可以看出此时的75已然变成了6,实现了跳跃: ![在这里插入图片描述](https://img-blog.csdnimg.cn/34f7c4db158945f1a709fc40d6f1843…

.Net C# 使用 EF Core

使用ORM框架可以加快开发速度,现在简单说下在.Net开发中使用微软官方提供的ORM框架 Entity Framework Core初始化数据库及数据表上手用法。 首先引入依赖项,通过Nuget服务添加如下3个包,因为当前使用的SQL Server数据库所以引入的是SQL Ser…

【Java算法题】剑指offer_01数据结构

前言 刷题链接: https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 链表 JZ24 反转链表 思路:基本操作,如下所示。 /* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }…

【开源硬件篇】STM32F103C8T6核心板

STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一、STM32F103C8T6芯片1.1 STM32F103C8T6简介1.2 芯片引脚说明 二、去耦电路2.1 原理图设计2.2 原理分析2.2.1 结论2.2.2 去耦效果图2.2.3 放置距离问题2.2.3 放置位置问题 2.3 PCB设计示例 三、晶振电路3.1 原理图设计3.2 原…

(9)AT24C02存储器

AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 存储介质:E2P ROM通讯接口:I2C总线容量:256字节 I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线 …

linux(基础IO)下

目录: 1.追加实现重定向 2.dup2系统调用 3.程序替换是否会影响我们曾经打开的文件呢?? ---------------------------------------------------------------------------------------------------------------------------- 1.追加实现重定向…

Linux操作系统安全

账号的基本概念 用户: Linux中通过建立不同权限的用户,合理的控制和运用系统的资源,并且可以帮助用户构建自己的私人空间,更好的组织和管理自己的文件。 当创建一个用户时,系统会操作 /etc/passwd /etc/shadow 这两个文…

(10)DS18B20温度传感器

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器(如热敏电阻),具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围:-55C 到 125C通信接…

希望计算机专业同学都知道这些博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价,可见网课质量之高!最全面的面试网站 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程,用简单的语言描述复杂的…

二十九、搜索与图论——克鲁斯卡尔算法(Kruskal 算法,稀疏图)

Kruskal算法主要内容 一、基本思路1、基本思想与概念2、算法步骤3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、基本思想与概念 解决问题: 多个城市中铺公路,使城市之间可以相互联通,问如何才能让铺设公路的长度最短——铺…

二十七、搜索与图论——Floyd 算法(多元路最短路径问题)

Floyd算法主要内容 一、基本思路1、算法原理2、基本思路3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、算法原理 遍历每条边,通过比较进行路径更新——暴力 解决多源最短路问题,求解 i 点到 j 点的最短距离 f [ i, j, k] 表示从 i 走…

REST服务,使用Dubbo还是SpringMVC

pringMVC、Dubbo 都支持 REST 服务,那当我们要开发一个 REST 服务接口时,该如何选择? 本文将包括以下两方面内容: REST服务的写法 REST服务的应用场景 REST服务的写法 首先我们看下 SpringMVC 怎么实现一个 REST 服务&#xff1…