Alibaba Cloud Linux 3.2 系统安装配置JDK指南
什么是openJDK
OpenJDK(Open Java Development Kit)是Java 开发工具包的开源实现,由 Oracle 主导、全球社区共同维护,也是 Oracle JDK 的核心开源基础(Oracle JDK 基于 OpenJDK 构建,仅增加少量闭源组件)。它是 Java 平台的官方开源版本,遵循 GPL v2 许可证(带 Classpath 例外),可免费用于商业和非商业场景。
一、核心特点
开源免费:无商业许可费用,可自由下载、修改、分发,适合企业级生产环境。
与标准兼容:完全遵循 Java SE 规范,保证代码的跨平台性和兼容性。
版本同步:与 Oracle JDK 版本号同步(如 JDK 8、11、17、21),LTS(长期支持)版本生命周期与 Oracle 一致(如 JDK 17 LTS 支持至 2029 年)。
社区驱动:由 Oracle、RedHat、Amazon、Google、Alibaba等企业和社区贡献者共同维护。
二、OpenJDK 与 Oracle JDK 的核心区别
| 维度 | OpenJDK | Oracle JDK |
|---|---|---|
| 许可证 | GPL v2 + Classpath 例外 | 商业许可(2019 年后收费) |
| 功能 | 无闭源组件(如飞行记录器早期版本) | 包含少量闭源组件(如商业支持、飞行记录器) |
| 更新支持 | 社区 / 厂商维护(如 RedHat、Amazon、Alibaba) | Oracle 官方付费支持 |
| 稳定性 | 与 Oracle JDK 核心一致 | 略优(闭源组件测试更充分) |
注:Oracle JDK 免费仅用于开发 / 测试,生产环境需付费;OpenJDK 无此限制。
三 安装 openJDK
openJDK 采用 Alibaba 进行安装
官网地址: https://www.aliyun.com/product/dragonwell?spm=5176.30204012.nav-v2-dropdown-menu-1.d_main_16_0_2.643158d7vMo5gV&scm=20140722.X_data-8e84283a578d2c93371a._.V_1

点击了解更多进入 Alibaba Dragonwell 下载页面

| Dragonwell 版本 | 代表JDK版本 |
|---|---|
| Dragonwell 8 | JDK8 |
| Dragonwell 11 | JDK 11 |
| Dragonwell 21 | JDK 21 |
产品功能:
- Dragonwell Standard Edition
基于OpenJDK上游,包含更多的增强,比如:bug-fixing, security patches, tooling support等。 - Dragonwell Extended Edition
标准版之上的增强版,包含了大量的面向云计算环境优化的定制特性,例如 Wisp2、JWarmup、Multi-Tenant、ElasticHeap 等。这些特性都在阿里生产环境得到大规模验证。
3.1 右键下载按钮 复制链接地址下载 tar
wget https://dragonwell.oss-cn-shanghai.aliyuncs.com/8.27.26-test-dragonwell_extended/Alibaba_Dragonwell_Extended_8.27.26_x64_linux.tar.gz
3.2 解压
创建解压目录
mkdir -p /opt/openJdk-8
解压
tar -zvxf Alibaba_Dragonwell_Extended_8.27.26_x64_linux.tar.gz -C /opt/openJdk-8 --strip-components=1
3.3 环境配置
3.3.1 编辑环境变量配置文件
vim /etc/profile
3.3.2 vim编辑器操作步骤
- 按 i 键 进入 INSERT 模式(插入模式)
- 使用方向键或鼠标滚轮滚动到文件 最后一行
- 添加以下配置内容(根据您的实际路径修改):
输入以下
# ==================== Java Environment ====================
export JAVA_HOME=/opt/openJdk-8
export PATH=$JAVA_HOME/bin:$PATH
# ==========================================================
重要提示:
请将 /opt/openJdk-8替换为您的 实际JDK路径
3.3.3 保存并退出vim:
按 ESC 键退出编辑模式
输入 :wq 并按回车键(保存并退出)
3.3.4 重新加载配置
source /etc/profile
3.4 进行安装测试
java -version
3.5 卸载
删除 1.3 环境配置 删除 压缩包 即可完成卸载
四 多个jdk 版本切换
PS: 根据上面教程安装多个jdk
4.1 创建环境变量
创建环境变量配置文件
sudo vim /etc/profile.d/jdks.sh
添加以下内容
# 变量名格式必须是 JAVA_{版本号}_HOME
# 如需继续添加其它JDK 版本 往下添加
# JDK 8
export JAVA_8_HOME=/opt/openJdk-8
# JDK 21
export JAVA_21_HOME=/opt/openJdk-21
# 添加了JDk 版本以下函数不需要进行改动,会自动检测
# 定义切换JDK版本的函数
function setjdk() {
# 检查是否提供了版本参数
if [ -z "$1" ]; then
# 如果没有提供参数,显示当前JAVA_HOME和所有已配置的JDK版本
echo "当前 JAVA_HOME: $JAVA_HOME"
echo "已检测到的 JDK 版本:"
# 遍历所有以JAVA_开头、以_HOME结尾的环境变量(这些变量存储了各JDK的安装路径)
for var_name in $(compgen -v | grep '^JAVA_.*_HOME$'); do
# 从变量名中提取版本号:移除前缀"JAVA_"和后缀"_HOME"
version="${var_name#JAVA_}"
version="${version%_HOME}"
# 显示版本号和对应的安装路径
echo " $version: ${!var_name}"
done
return
fi
# 如果提供了参数,根据参数构造目标JDK的环境变量名
# 例如:输入"8" -> 变量名"JAVA_8_HOME"
target_var="JAVA_${1}_HOME"
# 使用间接变量引用检查目标JDK变量是否存在
# ${!target_var} 在bash中表示引用名为target_var值的变量
if [ -z "${!target_var}" ]; then
# 如果变量不存在或为空,提示错误并显示所有可用版本
echo "错误: JDK 版本 $1 未配置"
echo "已检测到的 JDK 版本:"
for var_name in $(compgen -v | grep '^JAVA_.*_HOME$'); do
version="${var_name#JAVA_}"
version="${version%_HOME}"
echo " $version"
done
return 1 # 返回非零状态表示错误
fi
# 第一部分:清理PATH,移除所有JDK相关的路径
# 1. 保存当前PATH到局部变量current_path
local current_path="$PATH"
# 初始化一个空字符串来存储清理后的系统路径
local system_path=""
# 2. 将PATH按冒号分隔符拆分成数组
# IFS是内部字段分隔符,这里临时设置为冒号
# read -ra将读取的字符串分割后存入数组path_parts
IFS=':' read -ra path_parts <<< "$current_path"
# 3. 收集所有已配置的JDK的bin目录路径
# 初始化一个空数组jdk_paths来存储所有JDK的bin目录
local jdk_paths=()
# 遍历所有JAVA_*_HOME变量
for var_name in $(compgen -v | grep '^JAVA_.*_HOME$'); do
# 将每个JDK的bin目录路径添加到jdk_paths数组中
# ${!var_name}获取变量的值,然后拼接"/bin"
jdk_paths+=("${!var_name}/bin")
done
# 4. 重建PATH,过滤掉所有JDK的bin目录路径
# 遍历PATH中的每个路径片段
for part in "${path_parts[@]}"; do
# 标记当前片段是否为JDK路径,初始值为0(不是)
local is_jdk_path=0
# 检查当前路径片段是否与任何JDK的bin目录匹配
for jdk_path in "${jdk_paths[@]}"; do
# 如果匹配,标记为JDK路径并跳出循环
if [[ "$part" == "$jdk_path" ]]; then
is_jdk_path=1
break
fi
done
# 如果当前路径不是JDK路径且不为空,则将其添加到清理后的系统路径中
if [[ $is_jdk_path -eq 0 ]] && [[ -n "$part" ]]; then
if [[ -z "$system_path" ]]; then
# 如果system_path为空,直接赋值
system_path="$part"
else
# 否则用冒号连接新路径
system_path="$system_path:$part"
fi
fi
done
# 第二部分:设置新的PATH和JAVA_HOME
# 1. 设置新的PATH:将目标JDK的bin目录放在最前面,后面接清理后的系统路径
# ${!target_var}获取目标JDK的安装路径,然后拼接"/bin"
export PATH="${!target_var}/bin:$system_path"
# 2. 更新JAVA_HOME环境变量为目标JDK的安装路径
export JAVA_HOME="${!target_var}"
# 第三部分:修改系统配置文件中的JAVA_HOME
update_config() {
# 显示可用配置文件列表
echo ""
echo "请选择要修改的配置文件:"
echo "1) /etc/bashrc"
echo "2) /etc/profile"
echo "0) 跳过,不修改任何文件"
read -r -p "请选择 (0-2): " choice
case $choice in
1)
local profile_file="/etc/bashrc"
;;
2)
local profile_file="/etc/profile"
;;
0|*)
echo "跳过配置文件修改。"
return 0
;;
esac
# 检查配置文件是否存在,不存在则创建
if [ ! -f "$profile_file" ]; then
echo "配置文件 $profile_file 不存在"
return 1
fi
# 备份原文件 如需要 去掉注释
#cp "$profile_file" "${profile_file}.backup.$(date +%Y%m%d_%H%M%S)"
#echo "已创建备份文件: ${profile_file}.backup.$(date +%Y%m%d_%H%M%S)"
# 检查文件中是否已存在 JAVA_HOME 设置
if grep -q '^export JAVA_HOME=' "$profile_file"; then
# 如果存在,使用 sed 替换现有行
sed -i "s|^export JAVA_HOME=.*|export JAVA_HOME=\"${!target_var}\"|" "$profile_file"
echo "已修改配置文件 $profile_file 中的 JAVA_HOME 设置"
else
# 如果不存在,在文件末尾添加完整的 JAVA 环境设置
echo "" >> "$profile_file"
echo "# JAVA 环境设置,由 setjdk 函数自动生成" >> "$profile_file"
echo "export JAVA_HOME=\"${!target_var}\"" >> "$profile_file"
echo "export PATH=\"\$JAVA_HOME/bin:\$PATH\"" >> "$profile_file"
echo "已在配置文件 $profile_file 中添加 JAVA 环境设置"
fi
echo "请执行 'source $profile_file' 使永久设置生效"
}
# 第四部分:输出切换结果并验证
# 显示切换成功的消息
echo "已切换到 JDK $1"
# 执行java -version命令验证切换是否成功
java -version
}
4.2 重新加载配置
source /etc/profile.d/jdks.sh
4.3 使用示例
查看支持的版本
setjdk

切换版本
setjdk 21

尝试切换到不支持的版本
setjdk 22

长久生效
update_config

选择之前配置的JAVA环境的配置文件,请确认路径是否一致 PS:我之前配置java环境是 /etc/profile 配置文件

根据提示 执行 source /etc/profile 文件即可