CentOS 7系统下如何并行使用多个Java版本?
在CentOS 7上同时运行Java 8和Java 17应用
完全可以在CentOS 7上同时运行基于不同Java版本的应用,核心是让每个应用指向各自的Java安装路径,互不干扰,具体实现步骤如下:
1. 安装多个Java版本
安装Java 8
通过CentOS官方源直接安装OpenJDK 8:
yum install java-1.8.0-openjdk-devel -y
安装完成后,默认路径为/usr/lib/jvm/java-1.8.0-openjdk/
安装Java 17
如果官方源没有Java 17,可手动下载解压OpenJDK 17包:
- 下载对应版本的tar包
- 创建Java安装目录:
mkdir -p /usr/local/java
- 解压到目标目录:
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java/
解压后路径类似/usr/local/java/jdk-17.x.x/,记好这个路径。
2. 用alternatives管理Java版本(可选,方便切换系统默认)
注册两个Java版本到系统alternatives,便于快速切换默认Java,但不影响应用指定独立版本:
- 注册Java 8:
alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.8.0-openjdk/bin/java 1 alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.8.0-openjdk/bin/javac 1
- 注册Java 17:
alternatives --install /usr/bin/java java /usr/local/java/jdk-17.x.x/bin/java 2 alternatives --install /usr/bin/javac javac /usr/local/java/jdk-17.x.x/bin/javac 2
- 切换默认版本时执行:
alternatives --config java
按提示输入对应编号即可切换系统全局默认的Java版本。
3. 让应用使用指定的Java版本
这是关键,确保每个应用调用各自版本的Java:
方法一:启动脚本中直接指定Java绝对路径
在应用的启动命令里,不用java命令,而是写对应Java版本的绝对路径:
- Java 8应用启动示例:
/usr/lib/jvm/java-1.8.0-openjdk/bin/java -jar /path/to/your-java8-app.jar
- Java 17应用启动示例:
/usr/local/java/jdk-17.x.x/bin/java -jar /path/to/your-java17-app.jar
方法二:通过systemd服务配置指定Java环境
如果用systemd管理应用服务,在服务配置文件中设置JAVA_HOME环境变量:
比如Java 8应用的/etc/systemd/system/java8-app.service:
[Unit] Description=Java 8 Application Service After=network.target [Service] Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" ExecStart=%JAVA_HOME%/bin/java -jar /path/to/your-java8-app.jar User=appuser Restart=on-failure [Install] WantedBy=multi-user.target
Java 17应用的/etc/systemd/system/java17-app.service:
[Unit] Description=Java 17 Application Service After=network.target [Service] Environment="JAVA_HOME=/usr/local/java/jdk-17.x.x" ExecStart=%JAVA_HOME%/bin/java -jar /path/to/your-java17-app.jar User=appuser Restart=on-failure [Install] WantedBy=multi-user.target
配置完成后,重新加载systemd并启动服务:
systemctl daemon-reload systemctl start java8-app.service systemctl start java17-app.service
4. 验证版本正确性
查看应用进程使用的Java版本:
ps aux | grep java
或者直接执行对应Java路径的版本命令确认:
/usr/lib/jvm/java-1.8.0-openjdk/bin/java -version /usr/local/java/jdk-17.x.x/bin/java -version
内容的提问来源于stack exchange,提问作者Domagoj Marosevic
相关产品推荐
相关产品推荐

