前言

在开发或部署Java项目时,不同项目可能需要依赖不同版本的JDK(Java Development Kit)。例如,一个旧项目可能需要JDK 8,而一个新项目可能已经升级到JDK 17。如果你是在Linux环境下工作,如何高效管理和切换多版本JDK就是一个非常实际的问题。本网将介绍如何在Linux上轻松管理多版本JDK。

需求

博主想安装一个Jenkins,但是现在Jenkins需要高版本的JDK。
但Linux上只有JDK 8,所以有使用高版本JDK的需求,所以就要下载高版本的JDK 17。

众所周知,高版本JDK是收费的,所以就选择 社区版的OpenJDK 17

手动安装

解压

每个版本的操作流程都一致,具体操作步骤可以参考 Linux下安装JDK8 这篇文章。

切换版本

原项目使用JDK 8,所以在不影响原项目运行的情况下,可以临时切换到高版本JDK。
但每次切换版本都需要修改环境变量,所以博主图省事,就写了一个 shell命令文件,放在 /usr/local/jenkins/ 路径下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash
# 设置启动路径
START_PATH=$(pwd) # 当前工作路径
# 设置日志文件路径
LOG_FILE="$START_PATH/jenkins.log"
# 临时设置 JDK 17 路径
export JAVA_HOME=/usr/java/jdk-17.0.13
export PATH=$JAVA_HOME/bin:$PATH
# 启动 Jenkins,并将日志输出重定向到 jenkins.log 文件
echo "正在启动 Jenkins JDK 17..." | tee -a "$LOG_FILE"
java -jar /usr/local/jenkins/jenkins-2.463.war --httpPort=9090 >> "$LOG_FILE" 2>&1 &
# 获取 Jenkins 进程的 PID
JENKINS_PID=$!
# 显示进度条的函数
show_progress() {
local duration=$1
local interval=1
local progress=0
echo -n "等待Jenkins启动"
while [ $progress -lt $duration ]; do
sleep $interval
progress=$((progress + interval))
echo -n "#"
done
echo " 完成!"
}
# 设置等待时间(假设 Jenkins 启动时间为 30 秒,调整为实际启动时间)
WAIT_TIME=30
# 显示等待进度条
show_progress $WAIT_TIME
# 启动完成后,切换回 JDK 8
echo "正在切换 JDK 8..." | tee -a "$LOG_FILE"
export JAVA_HOME=/usr/java/jdk1.8.0_401
export PATH=$JAVA_HOME/bin:$PATH
# 打印当前使用的 Java 版本,并记录到日志文件
echo "当前JDK版本: $(java -version)" | tee -a "$LOG_FILE"
# 等待 Jenkins 进程结束
wait $JENKINS_PID

启用脚本

1
2
3
cd /usr/local/jenkins/

./start_jenkins.sh