CentOS7安装多版本jdk并切换jdk版本

目录

前言

在后端开发、服务器部署及运维工作中,Java开发环境是最基础且核心的依赖之一,而JDK作为我们Java程序运行和开发的基石,其版本选择直接影响项目的兼容性、稳定性与功能可用性。随着Java生态的快速迭代,JDK版本不断更新,从经典的JDK 8(长期支持版,仍是目前企业级项目的主流选择),到JDK 11、JDK 17等后续长期支持版本,不同项目往往会因开发框架、依赖组件的差异,对JDK版本提出不同要求------例如部分老旧项目基于Spring Boot 2.x开发,仅适配JDK 8;而新建项目采用Spring Boot 3.x及以上版本,则需依赖JDK 17及更高版本。

在CentOS服务器环境中,若手动安装多个JDK版本,不仅需要繁琐的环境变量配置、路径规划,后续切换版本时还需手动修改系统环境变量(如JAVA_HOME、PATH),操作繁琐且极易出错,一旦配置失误,还可能导致所有依赖JDK的服务无法正常启动,给开发和运维工作带来不必要的麻烦。因此,如何高效、便捷地在CentOS系统中安装多版本JDK,并通过专业工具实现版本的快速切换、统一管理,成为每一位后端开发者和运维人员必备的技能。

查看当前Java版本

bash 复制代码
[root@localhost ~]# java -version
openjdk version "17.0.18" 2026-01-20 LTS
OpenJDK Runtime Environment (build 17.0.18+10-LTS)
OpenJDK 64-Bit Server VM (build 17.0.18+10-LTS, mixed mode, sharing)

我们通过上面的信息可以看到,目前使用的是jdk17的一个版本,这个版本是我们之前在CentOS7(Linux)从系统安装到环境搭建中安装的版本,我当时使用的是spring提供的jdk17的安装包

下载jdk

因为上次使用的是spring提供的jdk安装包,这次我也同样使用spring提供的安装包,这次下载的是jdk21的版本Liberica JDK

因为我们是CentOS7的系统,所以我们直接下载rpm格式的安装包

我们下载完成安装包之后,使用xftp上传到CentOS中,依旧是上传到之前的/home/package目录下,在之前那篇文章中说过我们创建的/home/package目录是专门存放安装包的目录

被我标记出来的就是我刚刚上传的rpm包

安装jdk

我们先进入/home/package目录,依旧是使用rpm -ivh命令进行安装,和之前安装jdk17的时候一样

bash 复制代码
cd /home/package
rpm -ivh bellsoft-jdk21.0.10+10-linux-amd64.rpm 

运行完jdk21的版本就已经安装好了

这里会直接将版本切换到刚刚安装的jdk21版本,我们再查看以下当前版本

现在是jdk21的版本,可能有人会说,前面安装的时候提示正在升级/安装是不是把jdk17的版本给覆盖掉了,我们现在查看以下安装的jdk版本以及jdk安装的目录在哪里

bash 复制代码
rpm -qa | grep java

这里出来有三个,第一个是python的Java包这个不用管,在CentOS环境搭建的时候就说过,我们现在只看下面两个,一个是刚刚安装的jdk21,一个是原有的jdk17,现在我们版本也知道了,我们去查看一下jdk到底安装在哪个目录下

bash 复制代码
rpm -ql bellsoft-java17-17.0.18.0.0.10-1.x86_64

运行之后我们会看到很多信息,第一条就是jdk17的安装目录,我们直接cd过去,然后回到上一级目录,使用ll或者ls命令查看当前文件夹有哪些东西

bash 复制代码
cd /usr/lib/jvm/bellsoft-java17.x86_64
cd ..
ll

这里我们总共就看到有两个目录也就是我们的两个jdk版本

切换jdk版本

这里可能其他的博主会教大家去修改环境变量的一个文件vim /etc/profile,但是我这里教其他的方法,不通过环境变量文件去进行切换,使用alternatives进行软链接的方式来进行切换

bash 复制代码
alternatives --install /usr/bin/java java /usr/lib/jvm/bellsoft-java17.x86_64/bin/java 1
alternatives --install /usr/bin/java java /usr/lib/jvm/bellsoft-java21.x86_64/bin/java 2

现在我们已经将两个jdk版本就已经链接好了,最后一个参数1和2是我们在进行切换jdk的时候使用的,我们输入以下命令进行切换

bash 复制代码
alternatives --config java

这里我们输入1或者2,进行对应的jdk版本切换

然后我们再来查看当前的jdk版本

我们来查看一下javac的版本

会发现Javac的版本和jdk的版本对应不上,这是因为我们只切换了jdk的版本,没有切换javac的版本,同样切换javac的版本和切换jdk的方式是一样的

bash 复制代码
alternatives --config javac

切换jdk的时候最后一个参数是java,切换Javac的时候最后一个参数是javac,出来的效果和切换jdk的时候是一样的,用法也是一样的

配置简洁命令切换

bash 复制代码
vim /usr/local/bin/java-cut
bash 复制代码
#!/bin/bash
alternatives --config java
alternatives --config javac

这个脚本可以在全局使用,使用方式就是直接输入java-cut就会自动执行两条切换的命令

但是这里要给这个java-cut文件给一个权限,不然会提示权限不够

bash 复制代码
chmod +x /usr/local/bin/java-cut

总结

通过本文的实操方法,可轻松实现CentOS系统下多版本JDK的高效管理,无需再手动修改环境变量,大幅提升开发与运维效率,同时规避了环境配置失误带来的服务异常风险,为后续Java项目的稳定开发、部署与运行筑牢了基础。后续若需新增JDK版本或调整版本优先级,可参考本文相关步骤,快速完成配置与切换。

相关推荐
疯狂敲代码的老刘2 小时前
MyBatis Generator GUI 下载安装教程 可视化MyBatis代码生成
java·mybatis·mybatis-ui
追随者永远是胜利者2 小时前
(LeetCode-Hot100)23. 合并 K 个升序链表
java·算法·leetcode·链表·go
Moshow郑锴2 小时前
Java SpringBoot 疑难 Bug 排查思路解析:从“语法正确”到“行为相符”
java·spring boot·bug
APIshop2 小时前
淘宝商品评论接口实战解析:从抓包到数据抓取全链路技术指南
java·python
百锦再3 小时前
线程安全的单例模式全方位解读:从原理到最佳实践
java·javascript·安全·spring·单例模式·kafka·tomcat
百锦再3 小时前
Java synchronized关键字详解:从入门到原理(两课时)
java·开发语言·struts·spring·kafka·tomcat·maven
油丶酸萝卜别吃3 小时前
什么是 Java 内存模型(JMM)?
java·开发语言
量子炒饭大师3 小时前
【C++入门】Cyber神经的义体插件 —— 【类与对象】内部类
java·开发语言·c++·内部类·嵌套类
Hx_Ma163 小时前
测试题(四)
java·开发语言·jvm