Linux指定安装Java 8或Java 17 LTS版本的方法
在Linux服务器或开发环境中,Java 8(1.8)与Java 17均为长期支持(LTS)版本:前者支撑着大量传统的企业级稳定业务,而后者则是现代化Spring Boot 3及微服务架构的基准底座。许多系统默认源自带的Java并非所需目标版本,若直接运行宽泛的安装指令往往会引入不可控的默认版本。本文将针对主流的Debian/Ubuntu与RHEL/CentOS系列系统,详细讲解如何精准安装指定版本的OpenJDK 8或17,并通过多版本管理机制与环境变量配置确保目标环境准确就绪。
一、确定目标发行版与包管理器包名规则
Linux各大发行版对Java包的命名方式存在差异。在安装前,需要清晰识别目标系统采用的是APT包管理器(Ubuntu、Debian)还是RPM/YUM/DNF包管理器(CentOS、RHEL、Rocky Linux、AlmaLinux)。
| 发行版系列 | 包管理工具 | 指定 Java 8 (OpenJDK) 包名 | 指定 Java 17 (OpenJDK) 包名 |
|---|---|---|---|
| Ubuntu / Debian | apt |
openjdk-8-jdk |
openjdk-17-jdk |
| CentOS 7 / RHEL 7 | yum |
java-1.8.0-openjdk-devel |
需引入第三方源或手动下载 |
| CentOS 8+ / RHEL 8/9 / Rocky | dnf |
java-1.8.0-openjdk-devel |
java-17-openjdk-devel |
需要注意:如果只需要运行Java程序,可仅安装JRE包(如openjdk-17-jre);但若是服务器端部署、编译开发或需要使用jps、jstack等诊断工具,强烈建议安装带有编译工具集的完整开发包(JDK,即含-jdk或-devel后缀)。
二、在 Ubuntu / Debian 系统中安装指定版本
1. 更新本地包索引
在安装前首先同步软件源索引,避免因缓存过期导致包下载失败:
sudo apt update
2. 指定安装 Java 8
在终端执行以下指令安装 OpenJDK 8 JDK:
sudo apt install -y openjdk-8-jdk
openjdk-8-jdk。但在较新的Ubuntu 22.04及更高版本中,官方APT源已逐步移除了Java 8。如果提示找不到包,可使用Adoptium官方PPA源或采用后文介绍的手动归档解压方式。
3. 指定安装 Java 17
在终端执行以下指令安装 OpenJDK 17 JDK:
sudo apt install -y openjdk-17-jdk
三、在 CentOS / RHEL 系列系统中安装指定版本
1. 指定安装 Java 8
对于 CentOS 7/8/9 或 RHEL:
# CentOS 7 使用 yum
sudo yum install -y java-1.8.0-openjdk-devel
# CentOS 8/9 / Rocky Linux 使用 dnf
sudo dnf install -y java-1.8.0-openjdk-devel
2. 指定安装 Java 17
在较新的 CentOS Stream、RHEL 8/9 以及 Rocky Linux 中直接支持:
sudo dnf install -y java-17-openjdk-devel
四、多版本共存与版本快速切换
若系统中同时安装了 Java 8 与 Java 17,Linux提供了标准的候选软链接机制(alternatives 系统)来管理全局默认指向。读者无需手动逐一修改软链接。
1. 交互式选择默认 Java 运行环境
在终端运行交互式配置命令:
sudo update-alternatives --config java
系统将输出类似如下的候选项列表(示例输出):
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
Press <enter> to keep the current choice[*], or type selection number:
输入对应的序号(例如切换为 Java 8 输入 1,切换为 Java 17 输入 2)后按回车即可立即生效。
2. 切换编译器 javac
如果需要在命令行中执行编译,还需要同步切换 javac 的软链接:
sudo update-alternatives --config javac
五、配置 JAVA_HOME 环境变量
诸如 Tomcat、Maven、Kafka、Hadoop 等第三方服务通常不直接从 PATH 寻找 Java,而是强依赖环境变量 JAVA_HOME。配置该变量可避免软件启动时报“JAVA_HOME is not set”的错误。
1. 确认当前 Java 的真实安装主目录
可以通过解析软链接的最终指向找到根目录:
readlink -f $(which java)
示例输出:
# Java 17 在 Ubuntu 中的输出
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
这里的根目录即为 /usr/lib/jvm/java-17-openjdk-amd64(去除末尾的 /bin/java)。
2. 写入系统全局环境变量
推荐在 /etc/profile.d/ 目录下新建独立的配置脚本(如 java.sh),以便于后续维护与升级:
sudo nano /etc/profile.d/java.sh
在文件中写入以下内容(以配置 Java 17 为例):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
如果需要指定为 Java 8,在 Ubuntu 下通常修改为:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
保存退出后,执行以下命令使配置立即在当前终端生效:
source /etc/profile.d/java.sh
六、安装结果验证
在完成安装与配置后,运行以下两条命令验证版本与环境变量是否生效:
1. 检查 Java 版本
java -version
对于 Java 8,正确输出通常包含类似格式:
openjdk version "1.8.0_392"
OpenJDK Runtime Environment (build 1.8.0_392-8u392-ga-1~20.04-b08)
OpenJDK 64-Bit Server VM (build 25.392-b08, mixed mode)
对于 Java 17,正确输出通常包含类似格式:
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+9-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17.0.9+9-Ubuntu-120.04, mixed mode, sharing)
2. 检查环境变量输出
echo $JAVA_HOME
控制台应打印出配置的 JDK 主目录绝对路径。
七、常见排查与注意事项
- 避免使用通用的 default-jdk:在执行
apt install default-jdk时,系统会由发行版维护者指向当前版本的默认选择(例如在某些新版Ubuntu中会直接指向Java 21),这会导致版本超出业务兼容范围。务必使用显式包含-8-或-17-的完整包名。 - 多用户环境环境变量不生效:写入
~/.bashrc只对当前登录用户生效;若通过守护进程(如 systemd)或其它用户启动应用,应在/etc/profile.d/全局配置,或在服务的 systemdservice文件中显式配置Environment="JAVA_HOME=..."。 - 极简 Docker 镜像缺包:在基于 Alpine Linux 构建的基础容器中,包管理器为
apk,对应的包名为openjdk8或openjdk17,且使用 musl libc,排查此类环境时需注意 glibc 与 musl 的差异。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













