一、概述
当不同项目可能需要不同 Java 版本,这时我们需要在同一台机器上安装多个版本的 JDK,并能够方便地切换。主要通过以下步骤实现:
- 下载 JDK:从 Oracle 官网或 OpenJDK 网站下载所需的 JDK 版本。
- 安装 JDK:可以将不同版本的 JDK 安装到不同的目录。例如,将 JDK 8 安装在
/usr/lib/jvm/jdk-8,将 JDK 11 安装在/usr/lib/jvm/jdk-11。 - 配置环境变量:为不同版本的 jdk 创建对应的 JAVA_HOME,再创建一个通用的 JAVA_HOME。
- 切换 JDK 版本:将需要应用的 jdk 版本的 JAVA_HOME 赋值给这个通用的 JAVA_HOME。
- 验证版本:使用
java -version命令验证当前使用的 JDK 版本。
二、Windows 环境多个 JDK 安装与切换
2.1 下载 JDK
去 Oracle 官网上下载想要安装的 JDK 版本,https://www.oracle.com/java/technologies/downloads/。
2.2 安装 JDK
双击 .exe 文件,选择好安装目录进行安装。多个版本的 JDK 重复这两步操作就好。
2.3 配置环境变量
配置 CLASSPATH 环境变量,编辑 CLASSPATH 变量,在后面添加下面的配置,如果之前有配置过,也先删除再重新配置。.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
配置 Path 环境变量,编辑 Path 变量,在后面添加两条变量。如果之前配置过其他的 JDK 的 path 变量的话,就先把之前的配置删除,重新添加下面两条。并且这两条需要移动到最前面,不然后续无法切换 JDK 版本。%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
创建一个通用的 JAVA_HOME,将需要使用的 JDK 版本的 JAVA_HOME 赋值给这个通用的 JAVA_HOME。
在环境变量中新增不同 JDK 版本的 JAVA_HOME。
首先找到 JDK 安装的目录。
2.4 切换 JDK 版本
编辑通用的 JAVA_HOME 变量的值,将需要应用的 JDK 的 JAVA_HOME 值赋值给通用的 JAVA_HOME 变量。
2.5 验证版本
使用以下命令进行验证当前 JDK 版本信息:
# 检查当前 Java 版本
java -version
# 检查 Javac 版本
javac -version
三、Mac 环境多 JDK 安装与切换
3.1 下载 JDK
去 Oracle 官网上下载想要安装的 JDK 版本,M 芯片选择 arm 架构的 .bmg 格式的文件。
https://www.oracle.com/java/technologies/downloads/。
3.2 安装 JDK
双击下载的文件,安装步骤一步步点继续就好。
3.3 配置环境变量
编辑完成之后,执行 source .bash_profile 让配置文件生效。再使用 java -version 命令查看 JDK 版本信息。
打开终端,进入到 /root 目录下,通过 open .bash_profile 命令打开并编辑 .bash_profile 文件,如果不存在这个文件就创建一个这个名字的文件。
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
export JAVA_21_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH:.
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk21='export JAVA_HOME=$JAVA_21_HOME'
安装完成后会在 /Library/Java/JavaVirtualMachines 目录下看到安装的 JDK 信息。
3.4 切换 JDK 版本
可以根据上面配置的版本别名进行切换。
3.5 验证版本
使用以下命令进行验证当前 JDK 版本信息:
# 检查当前 Java 版本
java -version
# 检查 Javac 版本
javac -version
四、Linux 环境多 JDK 安装与切换
4.1 下载 JDK
下载 JDK
# 方式 1:从官网下载(需要账户)
# 访问 https://www.oracle.com/java/technologies/downloads/
# 或 https://adoptium.net/
# 方式 2:使用 wget 下载 OpenJDK(示例)
cd /tmp
# OpenJDK 8
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
# OpenJDK 11
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
# OpenJDK 17
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
# OpenJDK 21
wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz
创建统一的安装目录
# 创建 JDK 安装目录
sudo mkdir -p /usr/local/src/jdks
sudo chmod 755 /usr/local/src/jdks
4.2 安装 JDK
# 解压到 /usr/local/src/jdks 目录
sudo tar -xzf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/local/src/jdks/
sudo tar -xzf openjdk-11.0.2_linux-x64_bin.tar.gz -C /usr/local/src/jdks/
sudo tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/src/jdks/
sudo tar -xzf openjdk-21.0.2_linux-x64_bin.tar.gz -C /usr/local/src/jdks/
# 重命名为简洁的名称(可选)
cd /usr/local/src/jdks
sudo mv java-se-8u41-ri jdk-8
sudo mv jdk-11.* jdk-11
sudo mv jdk-17.* jdk-17
sudo mv jdk-21.* jdk-21
# 设置权限
sudo chmod -R 755 /usr/local/src/jdks/jdk-*
sudo chown -R root:root /usr/local/src/jdks/jdk-*
4.3 验证安装
# 检查每个 JDK 版本
/usr/local/src/jdks/jdk-8/bin/java -version
/usr/local/src/jdks/jdk-11/bin/java -version
/usr/local/src/jdks/jdk-17/bin/java -version
/usr/local/src/jdks/jdk-21/bin/java -version
4.4 配置 JDK 切换
4.4.1 使用环境变量(按需切换)
创建切换脚本
# 1. 创建切换脚本目录
mkdir -p ~/bin/jdk_switcher
# 2. 创建脚本
cat > ~/bin/jdk_switcher/jdk-switch.sh <<'EOF'
#!/bin/bash
# JDK 切换脚本
JDK_BASE_DIR="/usr/local/src/jdks"
CURRENT_JDK_FILE="$HOME/.current_jdk"
show_usage() {
echo "使用方法:$0 [版本号]"
echo "可用版本:"
ls -1 "$JDK_BASE_DIR" | grep -E "^jdk-|^java-" | sed 's/^/ /'
echo ""
echo "示例:"
echo " $0 8 # 切换到 JDK 8"
echo " $0 11 # 切换到 JDK 11"
echo " $0 17 # 切换到 JDK 17"
echo " $0 current # 显示当前版本"
}
get_jdk_path() {
local version=$1
local jdk_path
# 尝试匹配 jdk-版本号
jdk_path=$(ls -d "$JDK_BASE_DIR"/jdk-$version* 2>/dev/null | head -1)
# 如果没找到,尝试匹配 java-版本号
if [ -z "$jdk_path" ]; then
jdk_path=$(ls -d "$JDK_BASE_DIR"/java-$version* 2>/dev/null | head -1)
fi
echo "$jdk_path"
}
set_jdk() {
local version=$1
local jdk_path=$(get_jdk_path "$version")
if [ -z "$jdk_path" ]; then
echo "错误:未找到 JDK $version"
return 1
fi
if [ ! -d "$jdk_path" ]; then
echo "错误:JDK 路径不存在:$jdk_path"
return 1
fi
# 设置环境变量
export JAVA_HOME="$jdk_path"
export PATH="$JAVA_HOME/bin:$PATH"
# 保存当前选择
echo "$jdk_path" > "$CURRENT_JDK_FILE"
echo "已切换到:$jdk_path"
java -version
}
show_current() {
if [ -f "$CURRENT_JDK_FILE" ]; then
current_jdk=$(cat "$CURRENT_JDK_FILE")
echo "当前 JDK: $current_jdk"
$current_jdk/bin/java -version
else
echo "未设置 JDK"
java -version 2>/dev/null || echo "Java 未安装或未在 PATH 中"
fi
}
# 主逻辑
main() {
if [ $# -eq 0 ]; then
show_usage
return 1
fi
case "$1" in
"current")
show_current
;;
"list")
echo "已安装的 JDK 版本:"
ls -1 "$JDK_BASE_DIR" | grep -E "^jdk-|^java-" | sed 's/^/ /'
;;
"help"|"-h"|"--help")
show_usage
;;
*)
set_jdk "$1"
;;
esac
}
main "$@"
EOF
# 3. 设置执行权限
chmod +x ~/bin/jdk_switcher/jdk-switch.sh
# 4. 创建符号链接
ln -sf ~/bin/jdk_switcher/jdk-switch.sh ~/bin/jdk-switch
# 5. 添加到 .bashrc 或 .zshrc
echo 'alias java-switch="~/bin/jdk-switch"' >> ~/.bashrc
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
4.4.2 使用切换脚本
# 列出所有 JDK
jdk-switch list
# 切换到 JDK 8
jdk-switch 8
# 切换到 JDK 11
jdk-switch 11
# 查看当前版本
jdk-switch current
# 显示帮助
jdk-switch help

