在CentOS系统上安装多个JDK版本是许多开发者和系统管理员常见的需求,随着Java生态的不断发展,不同项目可能依赖于特定的JDK版本,例如旧版应用需要JDK 8,而新项目则使用JDK 11或更高版本,这种情况下,学会在同一台CentOS机器上管理多个JDK,能显著提升工作效率和系统灵活性,本文将一步步指导您完成这个过程,涵盖从准备到配置的各个环节,确保您能轻松应对多版本环境。

准备工作
在开始安装前,建议先检查系统当前已安装的JDK版本,打开终端,输入以下命令:
java -version
如果系统已安装JDK,您会看到版本信息,如果没有,这也不影响后续步骤,确保系统已更新到最新状态,使用以下命令:
sudo yum update -y
这能帮助避免潜在的依赖冲突,建议备份重要数据,以防操作中出现意外问题。
下载多个JDK版本
CentOS支持通过多种方式安装JDK,最常见的是使用YUM包管理器或手动下载压缩包,这里,我们将结合两种方法,以覆盖更多场景。
使用YUM安装一个基础版本,例如OpenJDK 8:
sudo yum install java-1.8.0-openjdk-devel -y
YUM会自动处理依赖关系,安装完成后,您可以通过java -version验证。
手动下载其他版本,比如OpenJDK 11,访问Oracle或OpenJDK官方网站,下载对应版本的tar.gz压缩包,使用wget命令下载:
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
重复此过程,下载其他所需版本,如JDK 17,确保下载的版本与您的系统架构匹配(例如x64)。
安装与解压
对于通过YUM安装的JDK,系统会自动将其放置在标准目录,如/usr/lib/jvm/,对于手动下载的压缩包,需要解压到合适位置,建议统一管理所有JDK版本,以简化后续配置。
创建一个目录来存放手动安装的JDK:

sudo mkdir /usr/lib/jvm/manual
解压下载的压缩包到此目录,以OpenJDK 11为例:
sudo tar -xzf openjdk-11.0.2_linux-x64_bin.tar.gz -C /usr/lib/jvm/manual/
解压后,您会看到类似jdk-11.0.2的文件夹,重复此步骤处理其他版本,确保每个版本都有独立的目录。
配置环境变量
环境变量是管理多个JDK的核心部分,通过设置JAVA_HOME和更新PATH,您可以轻松切换默认JDK版本。
检查当前系统环境,编辑/etc/profile文件,这是一个全局配置文件:
sudo vi /etc/profile
在文件末尾添加以下内容,为每个JDK版本设置变量。
export JAVA_8_HOME=/usr/lib/jvm/java-1.8.0-openjdk export JAVA_11_HOME=/usr/lib/jvm/manual/jdk-11.0.2 export JAVA_17_HOME=/usr/lib/jvm/manual/jdk-17.0.1 export PATH=$JAVA_8_HOME/bin:$PATH
这里,我们设置了多个JAVA_*_HOME变量,并暂时将JDK 8的路径添加到PATH中,保存文件后,运行以下命令使更改生效:
source /etc/profile
当您输入java -version时,应该看到JDK 8的版本信息。
使用Alternatives工具管理版本
CentOS提供了alternatives工具,允许您在多个软件版本间切换,这对于管理JDK非常有用,因为它可以动态更新符号链接。
为每个JDK版本注册到alternatives,以JDK 11为例:
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/manual/jdk-11.0.2/bin/java 2 sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/manual/jdk-11.0.2/bin/javac 2
这里的数字“2”表示优先级,您可以根据需要调整(数字越高,优先级越高),重复此命令为其他版本注册,例如JDK 8和JDK 17。

使用以下命令切换默认版本:
sudo alternatives --config java
系统会列出所有已注册的JDK版本,您只需输入对应数字即可切换,同样,为javac命令重复此过程,确保编译环境一致。
验证与测试
完成配置后,务必验证多JDK环境是否正常工作,切换不同版本后,运行java -version和javac -version,确认输出与预期一致。
切换到JDK 11:
sudo alternatives --config java # 选择JDK 11的选项 java -version
您应该看到JDK 11的版本信息,重复测试其他版本,确保所有版本都能正确调用。
可以编写一个简单的Java程序测试兼容性,创建一个HelloWorld.java文件:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello from JDK " + System.getProperty("java.version"));
}
} 编译并运行:
javac HelloWorld.java java HelloWorld
这能帮助您确认当前使用的JDK版本,并检查是否存在路径问题。
个人观点
作为一名长期使用CentOS的开发者,我认为在多JDK环境中,保持目录结构清晰至关重要,避免将手动安装的JDK与系统包混合,可以减少依赖冲突,定期检查更新,因为Java安全补丁频繁发布,如果您在团队环境中工作,建议文档化配置过程,以便其他成员快速上手,多版本管理不是负担,而是提升项目适应性的有效方式——它让旧系统维护与新功能开发并行不悖,真正发挥CentOS的稳定优势。
