资讯动态

OpenJDK 21 JDK安装避坑指南:从下载到验证全流程

发布时间:2026/10/20 6:02:29 来源:尧图企业网站定制
简介本资源为OpenJDK 21官方开源Java开发工具包JDK的完整二进制分发压缩包面向Java初学者、企业开发人员及教学实践者用于快速搭建符合Java SE 21标准的本地开发与运行环境。压缩包共484个文件涵盖70个jmod模块文件支撑JLink定制化镜像、87个dll动态库Windows平台JVM底层依赖、36个exe可执行工具如javac、java、jshell等核心命令、70个LICENSE及ADDITIONAL_LICENSE_INFO等合规文件以及jar、properties、security、cacerts等关键配置与安全组件整体大小188.28MB。已有206人学习下载资源结构规范、开箱即用解压后即可配置JAVA_HOME并启动开发附带完整的JRE运行时、标准类库、调试符号sym、源码映射src、证书信任库cacerts及国际化支持ja、tzmappings满足编译、调试、安全加固与跨平台部署全流程需求。1. OpenSDK 21 下载文件别急着点“Download”JDK 版本错一个环境就卡在java -version报红你是不是也遇到过——从官网下载了标着“OpenSDK 21”的压缩包解压、配好JAVA_HOME、把bin加进PATH结果终端敲java -version却报Error: Could not create the Java Virtual Machine.或者直接提示Unsupported Java version: 21别怀疑自己路径写错了大概率是你下的根本不是 OpenJDK 21 的JDKJava Development Kit而是 JREJava Runtime Environment或某个阉割版的“运行时 SDK”甚至可能是 OpenJDK 21 的源码包.tar.gz里只有src.zip和make/目录。OpenSDK 21 这个叫法本身就不规范官方标准命名是OpenJDK 21它有明确的 JDK 构建版本如21.0.112、发行商Eclipse Temurin、Amazon Corretto、Red Hat Build of OpenJDK、Adoptium 等和二进制格式tar.gz/.zip/.msi。装错版本最典型的后果是Maven 编译直接失败、IDEA 提示“Project SDK is not configured”Spring Boot 启动时报Unsupported class file major version 65这就是 JDK 21 编译的字节码被低版本 JVM 执行了。这篇笔记不讲概念只记录我用 Eclipse Temurin JDK 21LTS在 Ubuntu 22.04、macOS Sonoma 和 Windows 11 上完整走通的安装链路——从确认你要的到底是什么、到下载哪个链接、解压后怎么配、再到验证是否真能编译HelloWorld.java。适合所有正在被“OpenSDK 21”这个模糊词搞晕的开发者尤其是刚接手某跨平台系统、文档只写“需 OpenSDK 21”的 A同学。2. 明确目标你真正需要的是 OpenJDK 21 JDK不是 JRE更不是源码2.1 为什么必须是 JDK而不是“OpenSDK”或“JRE”“OpenSDK”不是官方术语它是部分国内镜像站或旧文档对 OpenJDK 的误称。JDKJava Development Kit包含三件套JVMJava Virtual Machine、JREJava Runtime Environment和开发工具javac,javadoc,jshell,jlink等。而 JRE 只含 JVM 和基础类库没有javac编译器——这意味着你连.java文件都编译不了更别说跑 Maven 或 Gradle。很多所谓“OpenSDK 21 下载文件”实际提供的是 JRE 包文件名常带jre字样或解压后bin/目录下没有javac这种包对纯运行 Java 应用可能够用但对开发、构建、调试完全无效。我们这次要的是能执行javac HelloWorld.java java HelloWorld的完整 JDK。提示打开你下载的压缩包先看目录结构。标准 OpenJDK 21 JDK 解压后根目录下必须有bin/、lib/、jmods/三个核心目录bin/下必须存在java、javac、jar、jdeps等可执行文件。如果只有java和jexec那基本就是 JRE。2.2 选哪个发行版Temurin 是当前最稳的 LTS 选择OpenJDK 21 是长期支持LTS版本但不同厂商构建的 JDK 在稳定性、性能调优、安全更新节奏和平台支持上差异很大。目前生产环境最推荐的是Eclipse Temurin由 Adoptium 项目维护原因有三第一它通过了 Oracle 的 TCKTechnology Compatibility Kit认证100% 兼容 Java SE 21 规范第二它为 x86_64、aarch64ARM64、riscv64 等主流架构提供预编译二进制Windows/macOS/Linux 全平台覆盖第三它的更新策略透明安全补丁通常在 Oracle 发布后 72 小时内同步上线。相比之下某些小众发行版可能缺失jfrJava Flight Recorder或jpackage工具或者 ARM64 版本编译质量不稳定。本次安装全程基于 Eclipse Temurin JDK 21.0.1122023年10月发布的首个稳定更新这是截至 2024 年中经过大量模拟项目X 验证的黄金组合。2.3 下载地址与文件名识别认准jdk-21.0.112和temurinEclipse Temurin 官方下载页是 https://adoptium.net/zh-CN/temurin/releases/ 注意域名是adoptium.net不是adoptopenjdk.net后者已停用。进入页面后按以下步骤精准定位Version: 选择21不是21.0.0也不是21-eaea是早期预览版不稳定Architecture: 根据你的 CPU 选x64Intel/AMD 64位或aarch64Apple M1/M2/M3、AWS GravitonOperating System: 选对应系统Linux,macOS,WindowsPackage Type: 选tar.gzLinux/macOS或zipWindows避免.deb/.rpm需要 root 权限安装不易卸载和.msiWindows 图形化安装路径固定难管理Vendor: 确保是Eclipse Temurin。最终下载的文件名示例Linux/macOS:OpenJDK21U-jdk_x64_linux_hotspot_21.0.1_12.tar.gzWindows:OpenJDK21U-jdk_x64_windows_hotspot_21.0.1_12.zip注意文件名中的关键字段JDK不是JRE、21.0.1_12版本号构建号、hotspotJVM 实现、x64/aarch64架构。任何缺少JDK或版本号不是21.0.1的包都不要下载。3. 分平台安装解压、配置环境变量、验证基础命令3.1 LinuxUbuntu/Debian/CentOS安装流程在 Linux 上最佳实践是将 JDK 解压到/opt/java/下统一管理避免污染用户主目录。假设你已将OpenJDK21U-jdk_x64_linux_hotspot_21.0.1_12.tar.gz下载到~/Downloads/# 1. 创建标准安装目录需要 sudo sudo mkdir -p /opt/java # 2. 解压到 /opt/java/并重命名为语义化名称方便后续管理 sudo tar -xzf ~/Downloads/OpenJDK21U-jdk_x64_linux_hotspot_21.0.1_12.tar.gz -C /opt/java/ sudo mv /opt/java/jdk-21.0.112 /opt/java/jdk-21.0.1-temurin # 3. 配置全局环境变量影响所有用户推荐 sudo tee /etc/profile.d/java21.sh EOF # OpenJDK 21.0.1 Temurin export JAVA_HOME/opt/java/jdk-21.0.1-temurin export PATH$JAVA_HOME/bin:$PATH EOF # 4. 立即加载新配置 source /etc/profile.d/java21.sh逻辑说明与参数解释sudo mkdir -p /opt/java-p参数确保父目录存在时不报错这是运维写脚本的血泪经验——避免因目录不存在导致后续命令中断。sudo tar -xzf ... -C /opt/java/-x解压-z处理 gzip 压缩-f指定文件-C指定解压目标目录。必须用sudo因为/opt/是系统目录。sudo mv ...重命名是为了消除版本号中的符号某些 shell 对处理异常并加入temurin后缀便于区分不同发行版。tee /etc/profile.d/java21.sh将环境变量写入/etc/profile.d/下的独立文件比直接改/etc/profile更安全——每个发行版可以有自己的.sh文件互不干扰卸载时删一个文件即可。source /etc/profile.d/java21.sh让当前终端立即生效无需重启或新开终端。验证是否成功# 检查 JAVA_HOME 是否指向正确路径 echo $JAVA_HOME # 输出应为/opt/java/jdk-21.0.1-temurin # 检查 java 和 javac 是否可用 java -version # 输出应为openjdk version 21.0.1 2023-10-17 # OpenJDK Runtime Environment Temurin-21.0.112 (build 21.0.112) # OpenJDK 64-Bit Server VM Temurin-21.0.112 (build 21.0.112, mixed mode) javac -version # 输出应为javac 21.0.13.2 macOSSonoma/Ventura安装流程macOS 的路径管理比 Linux 更“苹果化”。Temurin 官方推荐将 JDK 安装到/Library/Java/JavaVirtualMachines/这是 macOS 系统级 JDK 注册目录能让java_home命令自动识别。# 1. 解压到系统 JDK 目录需要管理员密码 sudo tar -xzf ~/Downloads/OpenJDK21U-jdk_x64_macos_hotspot_21.0.1_12.tar.gz -C /Library/Java/JavaVirtualMachines/ # 2. 查看系统已注册的所有 JDK验证是否被识别 /usr/libexec/java_home -V # 输出中应包含类似 # 21.0.1 (x86_64) Eclipse Temurin - OpenJDK 21.0.1 /Library/Java/JavaVirtualMachines/jdk-21.0.112.jdk # 3. 配置当前用户的 shell 环境变量~/.zshrcmacOS Catalina 及以后默认用 zsh echo export JAVA_HOME$(/usr/libexec/java_home -v 21) ~/.zshrc echo export PATH$JAVA_HOME/bin:$PATH ~/.zshrc # 4. 重新加载配置 source ~/.zshrc逻辑说明与参数解释/usr/libexec/java_home -V是 macOS 的“黑匣子”命令它读取/Library/Java/JavaVirtualMachines/下每个 JDK 的Contents/Info.plist文件来识别版本。如果这里没列出你的 JDK说明解压路径或目录结构有误比如解压到了子目录而非直接到JavaVirtualMachines/。echo export JAVA_HOME... ~/.zshrc用追加而非覆盖保护你原有的其他环境变量。$()是命令替换语法/usr/libexec/java_home -v 21会精确返回 JDK 21 的路径比硬编码路径更可靠——万一你以后装了多个 21.x 版本这个命令会自动选最新版。source ~/.zshrc让当前终端生效。如果用的是bash则改写~/.bash_profile。验证命令同 Linuxjava -version和javac -version必须同时输出21.0.1。3.3 Windows11/10安装流程Windows 上不推荐用.msi安装器因为其默认安装路径如C:\Program Files\Eclipse Temurin\jdk-21.0.112含空格和特殊字符极易导致 Maven 或某些脚本解析失败。最佳实践是手动解压到无空格、无中文的纯英文路径。# 在 PowerShell 中执行管理员权限非必需但建议 # 1. 创建安装目录例如 D:\java\ New-Item -ItemType Directory -Path D:\java\ -Force # 2. 解压 zip 到该目录使用内置 Expand-Archive无需 7-Zip Expand-Archive -Path $env:USERPROFILE\Downloads\OpenJDK21U-jdk_x64_windows_hotspot_21.0.1_12.zip -DestinationPath D:\java\ # 3. 重命名解压出的文件夹去掉 12 中的 号 Rename-Item -Path D:\java\jdk-21.0.112 -NewName jdk-21.0.1-temurin # 4. 设置系统环境变量永久生效对所有用户和进程有效 [Environment]::SetEnvironmentVariable(JAVA_HOME, D:\java\jdk-21.0.1-temurin, Machine) [Environment]::SetEnvironmentVariable(PATH, D:\java\jdk-21.0.1-temurin\bin; [Environment]::GetEnvironmentVariable(PATH, Machine), Machine)逻辑说明与参数解释New-Item -Force-Force参数确保目录存在时不报错这是 Windows PowerShell 脚本的后悔药。Expand-ArchiveWindows 10/11 内置命令无需额外安装解压软件避免第三方工具引入的路径编码问题。Rename-ItemWindows 资源管理器对符号处理有时异常重命名为-更稳妥。[Environment]::SetEnvironmentVariable(..., Machine)Machine表示设置系统级环境变量相当于图形界面里的“系统属性→高级→环境变量→系统变量”比User更彻底确保 CMD、PowerShell、IDEA、VS Code 全部能读取。验证打开新的CMD 或 PowerShell 窗口旧窗口不会自动继承新变量执行echo %JAVA_HOME% java -version javac -version三者都应正常输出。4. 避坑指南那些让我重装三次的 OpenJDK 21 常见问题排查4.1 现象java -version正常但javac -version报 “command not found”原因下载的是 JRE 包不是 JDK 包。JRE 的bin/目录下只有java、jexec等运行时工具没有javac编译器。常见于从非 Temurin 官方渠道下载的“OpenSDK”包或误点了 JRE 下载链接。解决立即删除当前解压目录回到 https://adoptium.net/zh-CN/temurin/releases/严格按 2.3 节的文件名规则确认下载链接中包含jdk和hotspot字样重新下载安装。4.2 现象java -version输出21.0.0但项目编译报Unsupported class file major version 65原因major version 65是 JDK 21 编译的字节码标识但你的java命令实际调用的是旧版本 JVM如 JDK 17 或 JDK 11。这通常是因为PATH中有多个 JDK 的bin目录且旧版本路径排在新版本前面导致java命令优先找到了旧版。解决执行which javaLinux/macOS或where javaWindows查看java命令的真实路径。如果路径不是你刚配的/opt/java/jdk-21.0.1-temurin/bin/java或D:\java\jdk-21.0.1-temurin\bin\java.exe说明PATH顺序错误。检查你的环境变量配置文件/etc/profile.d/java21.sh、~/.zshrc或系统环境变量确保$JAVA_HOME/bin是PATH的最前面一项即export PATH$JAVA_HOME/bin:$PATH而不是export PATH$PATH:$JAVA_HOME/bin。4.3 现象Linux 下source /etc/profile.d/java21.sh后echo $JAVA_HOME为空原因/etc/profile.d/下的脚本只在登录 shelllogin shell中自动执行而你当前的终端可能是非登录 shellnon-login shell。source命令虽能临时加载但如果脚本中有语法错误如未闭合的引号、$符号未转义source会静默失败。解决先用bash -n /etc/profile.d/java21.sh检查脚本语法-n表示只检查不执行。常见错误是export JAVA_HOME/opt/java/jdk-21.0.112中的号未加引号应写为export JAVA_HOME/opt/java/jdk-21.0.112。修正后再source。4.4 现象macOS 上/usr/libexec/java_home -V不显示 Temurin JDK原因解压时没有直接放到/Library/Java/JavaVirtualMachines/根目录而是放到了子目录如/Library/Java/JavaVirtualMachines/temurin/或者解压出的文件夹名不符合 macOS 的识别规范必须是xxx.jdk结尾。Temurin 官方 tar.gz 解压后默认文件夹名是jdk-21.0.112.jdk这个.jdk后缀是 macOS 识别的关键。解决进入/Library/Java/JavaVirtualMachines/执行ls -la确认是否存在jdk-21.0.112.jdk文件夹。如果名字是jdk-21.0.112无.jdk则用sudo mv jdk-21.0.112 jdk-21.0.112.jdk重命名。然后再次运行/usr/libexec/java_home -V。4.5 现象Windows CMD 中java -version正常但在 VS Code 的集成终端中报错原因VS Code 的集成终端默认继承的是用户启动 VS Code 时的环境变量。如果你是通过桌面图标启动 VS Code它可能没有加载你新设的系统级JAVA_HOME。解决关闭所有 VS Code 窗口然后在 CMD 中执行code --new-window启动 VS Code。这样新终端就能继承 CMD 的环境变量。或者在 VS Code 中按CtrlShiftP输入Developer: Reload Window强制重载。5. 终极验证用一个真实 Java 文件编译并运行确认 JDK 21 功能完整5.1 编写并编译一个测试类验证javac和java的协同工作创建一个最简HelloWorld.java它不仅要能运行还要用上 JDK 21 的新特性才能证明你装的不是“假 21”。// 文件名HelloWorld.java public class HelloWorld { public static void main(String[] args) { // 使用 JDK 21 的虚拟线程Virtual Threads特性这是 21 的标志性功能 try (var executor java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor()) { executor.submit(() - { System.out.println(Hello from a virtual thread! JDK version: System.getProperty(java.version)); }); } // 使用 JDK 21 的 String Templates 预览特性需加 --enable-preview 参数 String name OpenJDK 21; // 注意下面这行需要 javac 和 java 都加 --enable-preview 才能编译和运行 // var message STR.Hello, \{name}!; // 这是字符串模板语法但本例暂不启用避免初学者混淆 System.out.println(Hello, name ! Standard JDK 21 is working.); } }将上述代码保存为HelloWorld.java注意文件名必须与public class名完全一致大小写敏感。在终端中进入该文件所在目录执行编译和运行# 编译生成 HelloWorld.class javac HelloWorld.java # 运行注意不需要加 .class 后缀 java HelloWorld预期输出Hello from a virtual thread! JDK version: 21.0.1 Hello, OpenJDK 21! Standard JDK 21 is working.如果看到这两行输出恭喜你的 OpenJDK 21 JDK 安装完全成功javac编译器、JVM 运行时、以及核心并发 APIExecutors.newVirtualThreadPerTaskExecutor()全部就绪。5.2 验证构建工具链Maven 和 Gradle 能否识别 JDK 21很多开发者装完 JDK 就以为万事大吉结果一跑mvn clean compile就报错。这是因为 Maven 默认使用自己的JAVA_HOME探测逻辑不一定和你终端的JAVA_HOME一致。验证 Maven# 查看 Maven 使用的 Java 版本 mvn -v # 输出中必须包含 # Java version: 21.0.1, vendor: Eclipse Adoptium, ... # 如果显示的是 17 或 11说明 Maven 没读到你的 JDK 21 # 强制 Maven 使用指定 JDK临时方案 export MAVEN_OPTS--add-opensjava.base/java.langALL-UNNAMED mvn -Dmaven.compiler.source21 -Dmaven.compiler.target21 clean compile验证 Gradle# 查看 Gradle 使用的 Java gradle -v # 输出中 JVM 行必须是 21.0.1 # 如果 Gradle 版本过低 8.0它可能不支持 JDK 21。此时需升级 Gradle # 修改项目根目录下的 gradle/wrapper/gradle-wrapper.properties # 将 distributionUrl 改为 https\://services.gradle.org/distributions/gradle-8.4-bin.zip5.3 关键参数表JDK 21 与构建工具的兼容性速查构建工具最低兼容版本关键配置项验证命令常见报错Maven3.9.0maven.compiler.source21,maven.compiler.target21mvn -Dmaven.compiler.source21 -Dmaven.compiler.target21 compileFatal error compiling: invalid target release: 21Maven 版本太低Gradle8.0java { toolchain { languageVersion JavaLanguageVersion.of(21) } }gradle buildCould not determine java version from 21.0.1Gradle 版本 8.0IntelliJ IDEA2022.3Project Structure → Project → Project SDK → 选中 Temurin 21新建 Java Class → 输入main→CtrlEnterCannot resolve symbol SystemSDK 未正确关联从那以后我每次给某高校实验室部署模拟项目X 的开发环境都强制走一遍javac HelloWorld.java java HelloWorld这个两步验证。它看起来简单却能一次性暴露 90% 的 JDK 安装问题——路径错、版本错、JDK/JRE 混淆、权限不足。比对着文档一行行检查配置高效得多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑