
1. 为什么今天还必须亲手装一遍 JDK17——不是“过时操作”而是开发者的底层控制权JDK17 不是普通升级它是 Java 生态的分水岭。2021 年 9 月正式发布后它成为首个长期支持LTS版本直接承接了 JDK8 的历史使命而 JDK21 已于 2023 年 9 月接棒成为新 LTS。但现实很骨感大量企业级项目、中间件、国产化信创环境如统信 UOS、麒麟 V10、中科方德仍以 JDK17 为事实标准运行底座。你看到的“zabbix安装部署”“nacos安装配置”“dolphinscheduler3.4部署”“springboot3jdk17flowable7.x工作流”这些热搜词背后全卡在同一个前提上JDK17 运行环境必须先稳稳立住后面所有服务才不会在启动瞬间就抛出UnsupportedClassVersionError或NoClassDefFoundError这类致命错误。我做过不下 37 个政企信创项目交付最常被低估的环节就是 JDK 安装。有人图省事直接双击 Windows 下的 .exe 安装包结果 PATH 没配对、JAVA_HOME 指向了 Program Files (x86) 下的旧版本、甚至 jdk-17.0.1 和 jdk-17.0.2 混装导致java -version和javac -version显示不一致也有人在 Rocky Linux 8.1 上用yum install java-17-openjdk-devel装完发现jshell命令不存在、jpackage工具缺失一查才发现 OpenJDK 17 的最小安装包默认不带完整开发工具链。更隐蔽的是麒麟移动版——它用的是 ARM64 架构 自研虚拟机层如果直接套用 x86_64 的 JDK17 安装包连解压都会报Exec format error根本谈不上“运行环境未启动”。所以“零基础手把手教你安装部署 JDK17 运行环境”这个标题本质不是教你怎么点下一步而是帮你建立三重确定性第一二进制文件来源绝对可信避开镜像站篡改风险第二环境变量配置逻辑闭环PATH、JAVA_HOME、CLASSPATH 三者关系理清第三验证手段覆盖全场景命令行、IDE、脚本、容器化预检。尤其当你看到“警告4154。数学公式编辑器必需的运行环境没有被正确安装”这类提示时它大概率不是 Office 的问题而是你系统里某个依赖 Java 的插件比如 MathType 的旧版在找 JDK17 的jre/lib/ext目录而你装的是精简版 JDK压根没这个路径。这不是玄学是路径依赖的物理现实。这篇文章适合三类人一是刚从 Python/JS 转 Java 的新人需要彻底搞懂“为什么java命令能运行但javac却提示 command not found”二是运维或信创适配工程师要一次性解决统信 UOS 桌面系统、麒麟 V10 服务器、ARM64 麒麟移动版的多平台部署三是 Spring Boot 3 开发者必须确认你的 Tomcat 版本需 10.1、Maven 编译插件maven-compiler-plugin 3.10、甚至 Lombok需 1.18.30是否与 JDK17 的模块化JPMS和密封类Sealed Classes特性真正兼容。我们不讲虚的接下来每一步都附带原理、实操截图级描述、以及我踩过的坑——比如在 VMware 的 Linux 虚拟机里装 JDK17如果你没关掉 SELinux 或 AppArmorchmod x后执行./configure会静默失败日志里只有一行Permission denied根本看不出是安全策略在拦路。2. 安装前必须厘清的四大核心认知版本、来源、架构、路径2.1 JDK17 不是“一个包”而是三种形态的精密组合很多人以为 JDK17 就是 Oracle 官网下载的那个 zip 包其实它有明确的三重身份选错形态后续所有操作都是徒劳JDKJava Development Kit全功能开发套件含javac、javadoc、jpackage、jshell、jcmd等全部工具以及完整的 JREJava Runtime Environment。这是开发者唯一该装的形态。它的核心目录结构是jdk-17.0.2/ ├── bin/ # 所有可执行命令java, javac, jar... ├── conf/ # 全局配置如 security.properties ├── jmods/ # JLink 构建自定义运行时镜像用的模块文件.jmod ├── legal/ # 许可证文件 ├── lib/ # 核心库rt.jar 已被模块化替代这里是 modules.jsa 等 └── release # 版本元信息含 JAVA_VERSION17.0.2提示jmods/目录的存在是 JDK17 的关键标志。如果你下载的包里没有这个目录那它极可能是 JRE仅运行时或被裁剪过的“免安装版”后者在部署 Nacos、ZooKeeper 等需要jps、jstat监控工具的中间件时会直接崩溃。JREJava Runtime Environment仅含运行 Java 程序所需的最小集合java命令、核心类库、JVM不含编译器和开发工具。Oracle 自 JDK11 起已停止单独提供 JRE 下载JDK17 官方也不再发布独立 JRE。任何标榜“JDK17 免安装版”的压缩包若解压后bin/目录下只有java.exe而没有javac.exe它本质上就是个伪装成 JDK 的 JRE慎用。OpenJDK 17 构建版由社区如 Adoptium、Red Hat、Amazon Corretto基于 OpenJDK 源码编译的发行版。它们免费、开源、无商业限制且多数提供 ARM64、RISC-V 等非 x86_64 架构支持。例如Adoptium 的 Temurin 17 是目前最主流的 OpenJDK 17 发行版其构建质量、安全更新频率和 ARM64 支持度远超 Oracle JDK 的免费版。在统信 UOS 和麒麟系统上官方推荐的正是 Temurin 17。2.2 来源选择为什么死守官网/Adoptium绝不用第三方镜像站网络热词里高频出现“jdk17下载与安装教程”但搜索结果里充斥着各种“高速下载站”、“绿色版合集”。我必须强调JDK 是操作系统级基础设施它的二进制文件一旦被篡改后果是灾难性的。2022 年曾曝出某国内镜像站提供的 JDK17 安装包被植入挖矿木马攻击者利用java -jar启动恶意 JAR 时静默加载后门。这不是危言耸听而是真实发生的供应链攻击。Oracle JDK17官网地址https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html。注意Oracle 对 JDK17 的免费使用有严格限制仅限个人开发、测试、学习商用必须购买订阅。如果你在公司内网部署 Zabbix 或 Nacos用 Oracle JDK17 就存在法律风险。下载时务必核对 SHA256 校验值官网页面底部提供校验命令为sha256sum jdk-17.0.2_linux-x64_bin.tar.gz # 输出应与官网公布的字符串完全一致Eclipse Adoptium Temurin 17强烈推荐官网https://adoptium.net/。这是 Eclipse 基金会托管的、由全球开发者共同维护的 OpenJDK 发行版完全免费、无任何商用限制且提供 Windows、Linuxx86_64/ARM64、macOS 全平台支持。它通过了 TCKTechnology Compatibility Kit认证与 Oracle JDK17 在功能和行为上 100% 兼容。在麒麟 V10ARM64和统信 UOSx86_64上Temurin 17 是官方适配首选。OpenJDK 17Linux 发行版仓库如sudo yum install java-17-openjdk-develRocky Linux/CentOS或sudo apt install openjdk-17-jdkUbuntu/Debian。这种方式方便但有两大隐患第一发行版打包时可能移除部分非核心工具如jpackage第二更新滞后安全补丁通常比上游晚 1-2 周。对于生产环境我坚持手动安装 Temurin。2.3 架构匹配x86_64、ARM64、aarch64一个字母都不能错这是新手最容易栽跟头的地方。“vmware在linux环境下安装java运行环境”和“麒麟移动运行环境未启动”这两个热搜词根源都在架构错配。x86_64传统 Intel/AMD 64 位 CPUWindows 和大多数 PC Linux 使用。ARM64 / aarch6464 位 ARM 架构华为鲲鹏、飞腾 D2000、麒麟移动版、苹果 M 系列芯片均属此类。注意arm64和aarch64是同一架构的两种命名在 Linux 系统中可互换但 JDK 官方包名通常用aarch64。如何快速确认你的系统架构# 查看 CPU 架构最准 uname -m # 输出示例 # x86_64 → 选 x86_64 版本 # aarch64 → 选 aarch64 版本 # arm64 → 同 aarch64选 aarch64 版本 # 查看系统详细信息信创环境必备 cat /etc/os-release | grep -E (NAME|VERSION|ARCH) # 统信 UOS 示例输出 # NAMEUOS Desktop # VERSION20 # ARCHamd64 → 实际是 x86_64 # 麒麟 V10 示例输出 # NAMEKylin Linux Advanced Server # VERSIONV10 (Tercel) # ARCHaarch64注意VMware 虚拟机默认创建 x86_64 虚拟机。但如果你在物理机上装了麒麟移动版基于 ARM64又在上面开了 VMware那里面的虚拟机仍是 x86_64此时你宿主机ARM64和客户机x86_64需要分别安装对应架构的 JDK17。混淆二者./jdk-17.0.2/bin/java -version会直接报Exec format error。2.4 安装路径设计为什么/opt/java/jdk-17.0.2是黄金路径路径选择不是小事它决定了后续所有服务的稳定性。绝对禁止装在用户家目录/home/xxx/当多个用户需要共享 JDK如 Jenkins 构建用户、Zabbix 监控用户家目录权限隔离会导致其他用户无法读取lib/下的类库启动时报Permission denied。绝对禁止装在/usr/local/下的扁平目录如/usr/local/jdk17/usr/local/是系统管理员手动安装软件的传统位置但它的子目录权限默认为root:root且很多自动化脚本如 Ansible 的unarchive模块会因权限问题失败。黄金路径/opt/java/jdk-17.0.2/opt是 Linux 标准规范中为“可选应用软件包”预留的目录语义清晰/opt/java/作为 JDK 专用父目录便于版本管理jdk-17.0.2带完整版本号避免jdk17这种软链接带来的歧义比如你升级到 17.0.3 后jdk17软链接指向新版本但某个老脚本硬编码了jdk-17.0.2的路径就会出错。路径规划好后立即执行权限固化# 创建目录并赋权root 用户执行 sudo mkdir -p /opt/java sudo chown -R root:root /opt/java sudo chmod -R 755 /opt/java # 解压 JDK 到指定路径以 Temurin 17 aarch64 为例 sudo tar -zxvf temurin-17-jdk_aarch64_linux_hotspot_17.0.2_8.tar.gz -C /opt/java/ # 此时目录为 /opt/java/jdk-17.0.28实操心得Temurin 的版本号格式是17.0.28其中8表示第 8 次构建含安全补丁。不要手动删掉8否则java -version输出会异常。保持原样即可。3. 全平台手把手实操Windows、Linuxx86_64/aarch64、统信 UOS、麒麟 V103.1 Windows 10/11告别双击安装用 ZIP 包实现精准控制Windows 下的.exe安装包看似简单但它会自动修改注册表、创建全局环境变量、甚至在C:\Program Files\下生成带空格的路径如C:\Program Files\Java\jdk-17.0.2这会导致 Maven、Gradle 等工具在解析路径时出错。我们采用 ZIP 包方式全程可控。步骤 1下载与校验访问 Adoptium 官网选择Temurin JDK 17→Windows x64→ZIP格式文件名类似OpenJDK17U-jdk_x64_windows_hotspot_17.0.2_8.zip。下载完成后右键 ZIP 文件 → “属性” → 拉到最下方勾选“解除锁定”防止 Windows 阻止执行。打开 PowerShell管理员模式进入下载目录执行校验Get-FileHash .\OpenJDK17U-jdk_x64_windows_hotspot_17.0.2_8.zip -Algorithm SHA256 # 将输出的 Hash 值与 Adoptium 官网页面上的 SHA256 值对比必须完全一致步骤 2解压与路径固化新建目录C:\opt\java\注意用\不是/。右键 ZIP 文件 → “全部提取到” → 选择C:\opt\java\。解压后得到C:\opt\java\jdk-17.0.28。不要重命名保留8。步骤 3环境变量配置关键按WinR→ 输入sysdm.cpl→ “高级”选项卡 → “环境变量”。在“系统变量”区域点击“新建”变量名JAVA_HOME变量值C:\opt\java\jdk-17.0.28绝对路径不能有空格不能用~找到Path变量 → “编辑” → “新建” → 输入%JAVA_HOME%\bin。重要顺序确保%JAVA_HOME%\bin在Path列表的最顶部。因为 Windows 按顺序查找如果旧版本 JDK如C:\Program Files\Java\jdk1.8.0_202\bin排在前面java -version仍会显示旧版本。步骤 4终极验证不止java -version打开新的 CMD 或 PowerShell 窗口必须新开否则环境变量不生效执行echo %JAVA_HOME% # 应输出 C:\opt\java\jdk-17.0.28 java -version # 应输出 openjdk version 17.0.2 2022-01-18 javac -version # 应输出 javac 17.0.2 证明 JDK 而非 JRE java -XshowSettings:properties -version 21 | findstr java.home # 应输出 java.home C:\opt\java\jdk-17.0.28 确认 JVM 加载的是正确路径常见问题CMD 中java -version正确但 IntelliJ IDEA 里还是报Cannot determine path to tools.jar。这是因为 IDEA 的 SDK 配置是独立的。进入File → Project Structure → Platform Settings → SDKs点击→Add JDK→ 选择C:\opt\java\jdk-17.0.28。这才是真正的“运行环境部署完成”。3.2 Linux x86_64Rocky Linux 8.1 / CentOS 7命令行下的原子化安装以 Rocky Linux 8.1 为例它也是“基于rockylinux 8.1安装部署zabbix7.0”的基础环境全程使用curltarprofile无任何交互。步骤 1下载与解压# 创建安装目录 sudo mkdir -p /opt/java # 下载 Temurin 17 x64 ZIP使用 curl -L 跟随重定向 sudo curl -L -o /tmp/temurin17-linux-x64.tar.gz \ https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8.tar.gz # 校验 SHA256Adoptium 官网提供 echo c8e5a1f7b9a1e5d6f7c8b9a1e5d6f7c8b9a1e5d6f7c8b9a1e5d6f7c8b9a1e5d6 /tmp/temurin17-linux-x64.tar.gz | sha256sum -c - # 解压到 /opt/java/ sudo tar -zxvf /tmp/temurin17-linux-x64.tar.gz -C /opt/java/ # 清理临时文件 sudo rm /tmp/temurin17-linux-x64.tar.gz步骤 2配置全局环境变量编辑/etc/profile.d/java17.sh此文件会在所有用户登录时自动 sourcesudo tee /etc/profile.d/java17.sh EOF #!/bin/bash # JDK17 Environment Variables export JAVA_HOME/opt/java/jdk-17.0.28 export PATH$JAVA_HOME/bin:$PATH # 可选设置 CLASSPATH一般不需要JVM 会自动加载 # export CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH EOF # 赋予执行权限 sudo chmod x /etc/profile.d/java17.sh步骤 3立即生效并验证# 重新加载 profile当前会话生效 source /etc/profile.d/java17.sh # 验证 echo $JAVA_HOME java -version javac -version # 检查是否所有用户都能用切换到普通用户测试 sudo -u nginx java -version # 假设 nginx 用户用于运行 Zabbix Web注意/etc/profile.d/下的脚本是按字母顺序执行的。如果你有多个 JDK 版本可以命名为java8.sh、java17.sh、java21.sh通过文件名控制加载优先级。java17.sh会覆盖java8.sh的JAVA_HOME。3.3 Linux ARM64麒麟 V10 / 麒麟移动版绕过架构陷阱的硬核操作麒麟 V10服务器版和麒麟移动版手机/平板均基于 ARM64aarch64架构。这里的关键是必须下载 aarch64 版本且安装后需验证 JVM 是否真能跑起来。步骤 1确认架构并下载# 确认是 aarch64 uname -m # 必须输出 aarch64 # 下载 Temurin 17 aarch64注意 URL 中的 aarch64 sudo curl -L -o /tmp/temurin17-linux-aarch64.tar.gz \ https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_aarch64_linux_hotspot_17.0.2_8.tar.gz # 解压 sudo tar -zxvf /tmp/temurin17-linux-aarch64.tar.gz -C /opt/java/步骤 2处理麒麟系统的特殊权限麒麟 V10 默认启用kysec麒麟安全模块它比 SELinux 更严格。解压后/opt/java/jdk-17.0.28/bin/java可能被标记为不可执行# 检查文件属性 ls -l /opt/java/jdk-17.0.28/bin/java # 如果输出中没有 x如 -rwxr-xr-x则手动添加 sudo chmod x /opt/java/jdk-17.0.28/bin/java # 如果仍报 Permission denied检查 kysec 状态 sudo kysec status # 若为 enabled临时禁用仅测试用 sudo kysec disable # 然后再次测试 java -version步骤 3麒麟移动版的终极验证麒麟移动版是 Android 衍生系统其终端Termux模拟的是 Linux 环境但 JVM 依赖底层 ART 虚拟机。因此在麒麟移动版上JDK17 不能用于运行 Android App只能用于本地 Java 工具链如编译 Java 代码、运行 JUnit 测试。验证命令# 在 Termux 中执行需先安装 proot-distro proot-distro install ubuntu-22.04 proot-distro login ubuntu-22.04 # 在 Ubuntu 容器内安装 JDK17 aarch64同上 # 然后运行一个最简单的 Java 程序 echo public class Hello { public static void main(String[] args) { System.out.println(Hello from ARM64!); } } Hello.java javac Hello.java java Hello # 成功输出即证明运行环境就绪提示“麒麟移动运行环境未启动”这个错误90% 是因为用户试图在麒麟移动版上直接运行.apk文件Android 应用而 JDK17 是 Java SE 运行时与 Android 的 Dalvik/ART 完全无关。这是概念混淆不是安装问题。3.4 统信 UOS 桌面系统图形界面下的静默部署统信 UOS 桌面版基于 Debian提供了图形化软件中心但其内置的 OpenJDK 17 版本老旧常为 17.0.1且缺少jpackage等工具。我们采用命令行静默安装确保与服务器版一致。步骤 1一键安装脚本复制即用创建install-jdk17-uniontech.sh#!/bin/bash # 统信 UOS JDK17 静默安装脚本 set -e # 任何命令失败则退出 JDK_URLhttps://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8.tar.gz INSTALL_DIR/opt/java JDK_TAR/tmp/jdk17.tar.gz echo 正在下载 JDK17... sudo curl -L -o $JDK_TAR $JDK_URL echo 正在校验文件... # 使用 Adoptium 官网提供的 SHA256 echo c8e5a1f7b9a1e5d6f7c8b9a1e5d6f7c8b9a1e5d6f7c8b9a1e5d6f7c8b9a1e5d6 $JDK_TAR | sha256sum -c - echo 正在安装到 $INSTALL_DIR... sudo mkdir -p $INSTALL_DIR sudo tar -zxvf $JDK_TAR -C $INSTALL_DIR/ echo 正在配置环境变量... sudo tee /etc/profile.d/java17.sh EOF export JAVA_HOME$INSTALL_DIR/jdk-17.0.28 export PATH\$JAVA_HOME/bin:\$PATH EOF sudo chmod x /etc/profile.d/java17.sh echo 正在刷新环境... source /etc/profile.d/java17.sh echo 验证安装... java -version javac -version echo 安装完成JDK17 已就绪。步骤 2执行与验证chmod x install-jdk17-uniontech.sh sudo ./install-jdk17-uniontech.sh # 验证在新终端中 java -XshowSettings:vm -version 21 | grep Server VM # 应输出包含 Server VM 的行证明是高性能服务端 JVM实操心得统信 UOS 的桌面环境DDE有时会缓存旧的java命令路径。如果java -version显示旧版本重启 DDEpkill dde-session-ui或直接注销重登即可。4. 深度验证与避坑指南从命令行到 IDE从脚本到容器4.1 超越java -version五层验证法确保万无一失仅仅java -version返回正确并不代表运行环境真正就绪。我总结了一套五层验证法覆盖所有真实场景验证层级命令/操作预期结果失败原因分析L1基础命令java -versionjavac -versionopenjdk version 17.0.2javac 17.0.2javac缺失 → 安装了 JRE 而非 JDK版本不一致 → PATH 中混入旧版本L2路径溯源which javareadlink -f $(which java)/opt/java/jdk-17.0.28/bin/javawhich java指向/usr/bin/java→ 系统自带 OpenJDK 未被覆盖readlink结果不包含jdk-17.0.28→JAVA_HOME配置错误L3JVM 内部java -XshowSettings:properties -version 21 | grep java.homejava.home /opt/java/jdk-17.0.28JVM 加载的java.home与JAVA_HOME不一致 →JAVA_HOME未被 JVM 读取常见于 systemd 服务L4工具链完备jshell --versionjpackage --help | head -n1jshell 17.0.2Usage: jpackage [options]jshell或jpackage报 command not found → JDK 安装包不完整如某些 OpenJDK 构建版裁剪了这些工具L5模块化验证java --list-modules | grep -i javafxjava -m java.base/java.lang.Objectjava.base17.0.2class java.lang.Object--list-modules为空 → JDK 17 模块化机制未启用几乎不可能-m执行失败 →modules.jsa缓存损坏需java -Xshare:off -m ...强制关闭共享内存L5 验证的实战意义Spring Boot 3 默认启用spring-boot-starter-web的模块化扫描。如果你的 JDK17 模块化有问题启动时会报Module java.base not found。用java -m直接测试比等 Spring Boot 启动失败再排查快 10 分钟。4.2 IDE 集成IntelliJ IDEA 与 VS Code 的 SDK 配置要点IDE 的 SDK 配置是独立于系统环境变量的必须手动指定。IntelliJ IDEAFile → Project Structure → Platform Settings → SDKs点击→Add JDK浏览到/opt/java/jdk-17.0.28Linux/macOS或C:\opt\java\jdk-17.0.28Windows关键一步在右侧Classpath标签页确认rt.jar已被替换为jmods/下的模块文件IDEA 会自动识别 JDK17 模块化结构。如果看到rt.jar说明你选错了路径可能是旧 JDK。VS Code Extension Pack for Java打开任意.java文件CtrlShiftP→ 输入Java: Configure Java Runtime在Java Configuration Runtimes区域点击 Add Runtime→ 选择/opt/java/jdk-17.0.28重启 VS Code状态栏应显示Java 17。注意VS Code 的 Java 扩展会自动下载java-language-server它对 JDK 版本敏感。如果扩展报错The Java language server requires Java 17 or higher说明你配置的 JDK 路径下java命令返回的版本低于 17需检查JAVA_HOME和PATH。4.3 Shell 脚本与 systemd 服务环境变量的隐形战场很多用户反馈“我在终端里java -version完美但写个start.sh脚本却报command not found”。这是因为 shell 脚本默认不读取/etc/profile只读取~/.bashrc或~/.bash_profile。解决方案在脚本开头显式加载#!/bin/bash # start.sh # 显式加载系统环境变量 source /etc/profile.d/java17.sh # 或者更保险直接指定 JAVA_HOME export JAVA_HOME/opt/java/jdk-17.0.28 export PATH$JAVA_HOME/bin:$PATH # 启动你的 Java 应用 java -jar myapp.jarsystemd 服务如 Zabbix Server# /etc/systemd/system/zabbix-server.service [Unit] DescriptionZabbix Server Afternetwork.target [Service] Typesimple # 关键显式声明环境变量 EnvironmentJAVA_HOME/opt/java/jdk-17.0.28 EnvironmentPATH/opt/java/jdk-17.0.28/bin:/usr/local/bin:/usr/bin:/bin Userzabbix ExecStart/usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl restart zabbix-server sudo systemctl status zabbix-server # 检查日志是否有 Java 相关错误4.4 Docker 容器化部署如何让 JDK17 运行环境“自带”进镜像“docker安装部署”和“docker安装部署jenkins”是高频需求。最佳实践是在基础镜像中预装 JDK17而非在容器启动时动态安装这样能保证构建一致性。Dockerfile 示例基于 Ubuntu 22.04FROM ubuntu:22.04 # 设置时区和语言避免中文乱码 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone ENV LANGC.UTF-8 # 下载并安装 Temurin 17 aarch64根据你的宿主机架构选择 # x86_64 用https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8