一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux系统下OracleJDK17手动安装配置全流程指南

时间:2026-05-31 13:30:01 编辑:袖梨 来源:一聚教程网

Linux系统手动安装Oracle JDK17能精确控制版本并避免与系统包冲突,本指南将详细介绍从环境准备到多版本管理的全流程操作。

一、为什么选择手动安装?

Linux系统部署JDK主要有三种方式,各有特点:

Linux手动部署OracleJDK17的完全指南

方式 命令示例 优点 缺点
包管理器安装 apt install openjdk-17-jdk 一键安装,自动处理依赖 版本固定,通常是 OpenJDK
SDKMAN 管理 sdk install java 17 多版本切换方便 需要额外工具链
手动 tar.gz 安装 本文方法 版本精确可控,Oracle 官方原版 需手动配置

手动部署的核心价值体现在:

  1. 版本精准 — 可安装Oracle JDK任意小版本(如17.0.12)
  2. 环境隔离 — 避免与系统包管理器的OpenJDK产生冲突
  3. 迁移便捷 — 配置脚本可直接应用于CI/CD流水线或Docker镜像

二、环境准备

2.1 确认系统信息

执行安装前需明确系统架构和版本信息,确保下载匹配的安装包。

# 查看 CPU 架构(x86_64 或 aarch64)uname -m# 查看操作系统版本cat /etc/os-release# 查看当前是否已安装 Javajava -version 2>&1 || echo "未安装 Java"

典型输出示例:

x86_64PRETTY_NAME="Ubuntu 22.04.3 LTS"openjdk version "11.0.21" 2023-10-17OpenJDK Runtime Environment (build 11.0.21+9-Ubuntu-0ubuntu122.04)OpenJDK 64-Bit Server VM (build 11.0.21+9-Ubuntu-0ubuntu122.04, mixed mode, sharing)

该输出显示Ubuntu 22.04系统已预装OpenJDK 11,CPU为x86_64架构。

2.2 检查磁盘空间

JDK 17完整安装约需占用300MB ~ 400MB空间。

df -h /opt

建议目标安装目录(如/opt)保留至少1GB可用空间。

三、清理残留的 Java 环境

若系统存在旧版Java(OpenJDK或其他版本JDK),建议先彻底清理避免路径冲突。

3.1 查找已安装的 Java 包

# Ubuntu / Debian 系dpkg -l | grep -i java# CentOS / RHEL 系rpm -qa | grep -i java

3.2 卸载旧版 Java

# Ubuntu / Debian 系sudo apt-get remove --purge openjdk-*sudo apt-get autoremove# CentOS / RHEL 系sudo yum remove java-11-openjdk*sudo yum remove java-1.8.0-openjdk*

3.3 清理残留文件

包管理器卸载后可能残留配置文件或软链接:

# 查找可能残留的 Java 相关文件sudo find /usr/lib/jvm -name "*java*" 2>/dev/nullsudo find /etc -name "*java*" 2>/dev/null# 确认无误后清理(⚠️ 谨慎操作!务必核对路径)sudo rm -rf /usr/lib/jvm/java-*sudo rm -f /etc/profile.d/jdk.sh

重要提示:执行rm命令前务必用find确认路径准确!误删系统文件可能导致故障。不确定时可跳过此步直接覆盖安装。

3.4 清除旧的环境变量

检查并清理~/.bashrc~/.zshrc/etc/profile中关于JAVA_HOME的配置:

# 查看包含 JAVA_HOME 的行grep -n "JAVA_HOME" ~/.bashrc ~/.zshrc /etc/profile 2>/dev/null

发现残留配置时可暂时注释或删除,待新版本安装完成后再统一设置。

四、下载 Oracle JDK 17

4.1 获取下载链接

访问Oracle官方Java下载页面,定位JDK 17 LTS版本。

版本注意事项

  1. 17.0.12及更早版本:直接下载无需登录
  2. 17.0.13及更新版本:需Oracle账号并同意OTN协议
  3. 历史版本查看:Java SE 17 Archive Downloads

4.2 使用 wget 命令行下载

# x86_64 架构(最常见)wget --no-cookie --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie"      "https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz"# aarch64 / ARM 架构wget --no-cookie --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie"      "https://download.oracle.com/java/17/latest/jdk-17_linux-aarch64_bin.tar.gz"

--no-check-certificate参数用于跳过SSL证书验证(部分内网环境需要),--header参数实现自动接受许可协议。

4.3 验证下载完整性

# 查看文件大小(正常应在190MB左右)ls -lh jdk-17_linux-x64_bin.tar.gz# 计算MD5校验值并与官网比对md5sum jdk-17_linux-x64_bin.tar.gz

五、解压安装

5.1 选择安装位置

Linux系统常用的Java安装路径包括:

位置 适用场景 权限要求
/opt/java/ 推荐,独立管理 root
/usr/lib/jvm/ 传统位置,兼容性好 root
/usr/local/ 本地编译安装 root

本文以/opt/java/为例演示:

# 创建安装目录sudo mkdir -p /opt/java# 移动安装包到安装目录sudo mv jdk-17_linux-x64_bin.tar.gz /opt/java/# 进入安装目录cd /opt/java

5.2 解压 tar.gz 包

# 解压(自动创建jdk-17.0.x子目录)sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz# 查看解压结果ls -la /opt/java/

标准输出示例:

drwxr-xr-x  13 root root   4096 May 15 10:30 jdk-17.0.12-rw-r--r--   1 root root 198M May 15 10:28 jdk-17_linux-x64_bin.tar.gz

5.3 清理安装包(可选)

# 解压完成后可删除压缩包节省空间sudo rm jdk-17_linux-x64_bin.tar.gz

5.4 安装结果示意

digraph jdk_install {    rankdir=LR;    node [shape=box, style=filled, fillcolor="#e8f4f8"];        "tar.gz 压缩包" -> "tar -zxvf" -> "jdk-17.0.12/ 目录";    "jdk-17.0.12/" -> "bin/       [java/javac/jdb]";    "jdk-17.0.12/" -> "lib/       [核心类库]";    "jdk-17.0.12/" -> "jre/       [运行时环境]";    "jdk-17.0.12/" -> "conf/      [配置文件]";}

六、配置环境变量

这是最关键的操作步骤,提供三种配置方式按推荐优先级排序:

6.1 方式一:/etc/profile.d/(推荐)

该方式仅影响Java配置,不污染主配置文件且对所有用户生效。

# 创建独立配置文件sudo vim /etc/profile.d/jdk.sh

写入以下内容:

# Oracle JDK 17 环境变量配置export JAVA_HOME=/opt/java/jdk-17.0.12export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH

特别注意:将/opt/java/jdk-17.0.12替换为实际解压目录名,可通过ls /opt/java/确认。

使配置立即生效:

source /etc/profile.d/jdk.sh

6.2 方式二:修改/etc/profile(所有用户)

sudo vim /etc/profile

在文件末尾追加:

# Oracle JDK 17export JAVA_HOME=/opt/java/jdk-17.0.12export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib
source /etc/profile

6.3 方式三:修改~/.bashrc(仅当前用户)

vim ~/.bashrc

在文件末尾追加:

# Oracle JDK 17export JAVA_HOME=/opt/java/jdk-17.0.12export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib
source ~/.bashrc

6.4 三种方式对比

对比项 profile.d/ /etc/profile ~/.bashrc
作用范围 所有用户 所有用户 仅当前用户
维护性 优秀(独立文件) 一般(混在主配置中) 良好
Shell 兼容 bash + zsh bash + zsh bash + zsh
推荐度 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐

七、验证安装

7.1 基础验证

# 检查 java 命令版本java -version# 预期输出:# java version "17.0.12" 2024-07-16 LTS# Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)# Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286, mixed mode, sharing)# 检查 javac 编译器版本javac -version# 预期输出:# javac 17.0.12# 确认 JAVA_HOME 正确设置echo $JAVA_HOME# 预期输出:# /opt/java/jdk-17.0.12

7.2 运行测试程序

创建测试Java文件验证编译运行功能:

// 创建测试文件cat > Test.java << 'EOF'public class Test {    public static void main(String[] args) {        System.out.println("Hello from JDK " + System.getProperty("java.version"));        System.out.println("OS: " + System.getProperty("os.name"));                // 测试 StringJoiner(JDK 17 内置 API)        java.util.StringJoiner sj = new java.util.StringJoiner(", ");        sj.add("Oracle").add("JDK").add("17");        System.out.println(sj);    }}EOF# 编译javac Test.java# 运行java Test# 预期输出:# Hello from JDK 17.0.12# OS: Linux# Oracle, JDK, 17# 清理测试文件rm Test.java Test.class

7.3 验证流程图

graph LR    A["source /etc/profile"] --> B["java -version"]    B --> C{"版本是否为 17?"}    C -->|"是"| D["javac -version"]    C -->|"否"| E["检查 JAVA_HOME 路径"]    E --> F["修正环境变量"]    F --> B    D --> G{"版本是否为 17?"}    G -->|"是"| H["✅ 安装成功"]    G -->|"否"| E

八、多 JDK 版本管理

实际场景常需同时存在多个JDK版本(如项目A用JDK 8,项目B用JDK 17)。

8.1 使用 update-alternatives 统一管理

# 注册 JDK 17sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-17.0.12/bin/java 1700sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-17.0.12/bin/javac 1700sudo update-alternatives --install /usr/bin/jar jar /opt/java/jdk-17.0.12/bin/jar 1700# 如果还有 JDK 8,也注册进去sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-1.8.0/bin/java 1800# 查看已注册的版本列表sudo update-alternatives --list java# 交互式切换版本sudo update-alternatives --config java# 分别配置 javac 和 jarsudo update-alternatives --config javacsudo update-alternatives --config jar

8.2 优先级数字说明

数字越大,优先级越高1700 → JDK 171800 → JDK 8当数字相同时,最后注册的版本成为默认

8.3 版本切换流程

flowchart TD    A["需要切换 JDK 版本"] --> B["update-alternatives --config java"]    B --> C["输入对应编号"]    C --> D["source /etc/profile"]    D --> E["java -version 验证"]    E --> F["重启相关服务"]        subgraph 常见场景        G["部署新项目 → 切到高版本"]        H["回滚上线 → 切到低版本"]        I["并行测试 → 不切换"]    end        A --> G    A --> H    A --> I

8.4 按项目动态切换(进阶)

无需全局切换时,可在项目启动脚本中临时指定:

#!/bin/bash# deploy.sh — 项目专属 JDKexport JAVA_HOME=/opt/java/jdk-17.0.12export PATH=$JAVA_HOME/bin:$PATHecho "使用 ${JAVA_HOME} 启动应用..."java -jar /opt/apps/myapp.jar

九、Docker 中使用 Oracle JDK 17

Docker环境可参考以下Dockerfile配置:

# 基于官方 JDK 17 镜像(最简单的方式)FROM eclipse-temurin:17-jre# 或者手动安装 Oracle JDK 17FROM ubuntu:22.04COPY jdk-17_linux-x64_bin.tar.gz /tmp/RUN mkdir -p /opt/java &&     tar -zxvf /tmp/jdk-17_linux-x64_bin.tar.gz -C /opt/java &&     rm /tmp/jdk-17_linux-x64_bin.tar.gz &&     echo 'export JAVA_HOME=/opt/java/jdk-17.0.12' > /etc/profile.d/jdk.sh &&     echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk.shENV JAVA_HOME=/opt/java/jdk-17.0.12ENV PATH=$JAVA_HOME/bin:$PATHWORKDIR /appCOPY target/myapp.jar /app/CMD ["java", "-jar", "myapp.jar"]

十、常见问题排查

10.1 java: command not found

# 原因:环境变量未生效或未正确配置# 检查 1:确认 java 二进制文件存在ls -l /opt/java/jdk-17.0.12/bin/java# 检查 2:确认 JAVA_HOME 已设置echo $JAVA_HOME# 检查 3:手动 source 配置文件source /etc/profile.d/jdk.sh# 检查 4:查看 PATH 是否包含 JAVA_HOME/binecho $PATH | tr ':' 'n' | grep java

10.2 版本不对(显示的是 OpenJDK)

# 原因:系统 PATH 中其他 Java 路径排在前面# 查找所有 java 可执行文件which -a java# 预期应该只有 /opt/java/jdk-17.0.12/bin/java# 如果有其他路径,检查 /usr/bin/ 下的软链接ls -l /usr/bin/javasudo update-alternatives --set java /opt/java/jdk-17.0.12/bin/java

10.3 中文乱码

# 原因:Linux 容器中没有中文字体包# Ubuntu / Debiansudo apt-get install -y fonts-wqy-microhei fonts-wqy-zenhei# CentOS / RHELsudo yum install -y wqy-microhei-fonts

10.4 Permission Denied

# 原因:解压后的文件没有执行权限sudo chmod +x /opt/java/jdk-17.0.12/bin/*

10.5 问题速查表

报错信息 原因 解决方案
command not found 环境变量未配置 source /etc/profile.d/jdk.sh
版本号不是 17 系统有其他 Java update-alternatives --config java
Unable to init server 无图形环境 服务器环境不需要 GUI,忽略即可
中文乱码 缺少字体包 安装 fonts-wqy-microhei
Permission denied 文件无执行权限 chmod +x bin/*

十一、总结

安装步骤回顾

sequenceDiagram    participant U as 开发者    participant S as 服务器        U->>S: 1. 检查环境与旧版本    S-->>U: 返回系统信息和已安装 Java    U->>S: 2. 清理旧版 Java    S-->>U: 确认清理干净    U->>S: 3. 下载 JDK 17 tar.gz    S-->>U: 下载完成    U->>S: 4. 解压到 /opt/java/    S-->>U: 解压成功    U->>S: 5. 配置 /etc/profile.d/jdk.sh    S-->>U: 配置已写入    U->>S: 6. source 使配置生效    S-->>U: 生效成功    U->>S: 7. java -version 验证    S-->>U: ✅ java version "17.0.x"
步骤 关键命令 耗时
检查环境 java -version 10s
清理旧版 apt-get remove 1-3min
下载安装 wget 2-5min(视网速)
解压安装 tar -zxvf 30s
配置环境变量 vim + source 30s
验证 java -version 10s

核心要点

  1. 先清理再安装 — 避免版本冲突,但删除前务必确认路径
  2. 安装位置要统一 — 推荐 /opt/java/,保持系统整洁
  3. 环境变量用独立文件/etc/profile.d/jdk.sh 比改 /etc/profile 更易维护
  4. 路径替换别遗漏 — 把示例中的 jdk-17.0.12 换成实际目录名
  5. 多用 update-alternatives — 多版本管理的标准做法

通过本指南详细步骤,您已掌握Linux系统手动部署Oracle JDK17的全套方法,包括环境准备、版本管理及常见问题解决方案,为Java开发环境搭建提供可靠支持。

热门栏目