尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OpenJDK 发行版怎么选?Amazon Corretto 17 下载部署全指南

OpenJDK 发行版怎么选?Amazon Corretto 17 下载部署全指南 最近有个老朋友问我搜“OpenJDK下载”出来的结果五花八门有 Oracle 官方也有各种发行版到底该下哪个正好前阵子给团队搭新项目环境我又把 Amazon Corretto 17 的下载和部署完整走了一遍。这篇就索性把经验写透——为什么我优先选 Corretto 17、下载前要确认什么、三条主流下载路线各有什么坑以及装完之后怎么验证才算真正到位。先说明一下定位Corretto 是亚马逊基于 OpenJDK 维护的免费发行版17 这个版本号对应 Java 17属于长期支持版本。它适合两类人一类是生产环境想要长期稳定、有安全补丁保障的开发者另一类是自己电脑上需要一套干净 JDK、又不想为授权问题烧脑的普通用户。无论你是刚入门的小白还是已经踩过不少坑的老手这篇应该都能给你一点参考。1. 为什么我推荐 Corretto 17免费、LTS 与 AWS 级维护背书1.1 Corretto 到底解决了什么问题很多人一听到“OpenJDK”就以为是 Oracle 官方那个 jdk.java.net 下载站。实际上 OpenJDK 是一个开源项目任何厂商都可以基于它构建自己的发行版Corretto 就是其中由亚马逊维护的一个。它和 Oracle JDK 在 Java 语言规范、JVM 行为上没有本质区别因为底层源码来自同一个 OpenJDK 项目但厂家各自负责打补丁、做测试、提供下载和更新。Corretto 最大的价值在于“免费 长期维护”。Java 17 属于 LTS长期支持版本亚马逊承诺对 Corretto 17 提供比普通版本更长的安全更新支持覆盖到 2027 年甚至更久。对生产环境来说这意味着你不用每隔半年被版本强制迁移追着跑也不需要在 Oracle 的付费订阅和免费使用之间反复纠结。另一个容易被忽略的点是“AWS 级维护背书”。亚马逊内部大量业务跑在 Java 上Corretto 某种意义上就是亚马逊给自己用的 JDK 顺手对外开放。这就导致它的补丁节奏、回归测试、平台适配都相对贴近真实大规模生产场景而不是实验室里编译完就扔出来。1.2 和其他主流 OpenJDK 发行版的正面对比不少人选发行版时会在这几个里面犹豫Oracle JDK、AdoptiumEclipse Temurin、Azul Zulu、Amazon Corretto。我整理了一个基于日常真实使用感受的对比表注意这不是官方参数更多是“用下来什么感觉”。发行版授权费用LTS 支持平台覆盖我眼中最突出的优势Oracle JDK商用收费付费订阅下较长Windows / Linux / macOS与 Oracle 数据库、中间件集成调试最方便Eclipse Temurin免费厂商承诺较长主流平台齐全社区活跃Docker 镜像生态最广Azul Zulu免费支持周期长平台非常全冷启动和嵌入式场景优化明显Amazon Corretto免费LTS 路线清晰主流平台齐全下载链接稳定更新机制规范和 AWS 生态无缝如果你问我的建议个人开发机用哪个都行生产环境如果跑在 AWS 上Corretto 自然是省心选择如果跑在自建机房或国内云Temurin 和 Corretto 也都不差。最关键的反而不是选哪个发行版而是选完了之后能不能持续收到安全补丁。很多人当年用某个免费 JDK 用得挺好结果厂商停止维护了只能自己盯 CVE 公告那是真的心累。1.3 先确认两个“不适用”场景免得白折腾Corretto 不是万能的有两类情况我建议你直接绕道。第一类是你需要某个只有在 Oracle JDK 里才有的商业特性比如 Java Flight Recorder 在旧版本里的差异化功能。不过说实话Java 17 时代这些工具大部分已经开源进入 OpenJDK 主线Corretto 17 里也包含 Flight Recorder、Mission Control 等能力这种差异比以前小多了。第二类是你所在企业有强制安全合规清单要求必须使用特定发行版或特定厂商的签名证书那就照清单执行别自己发挥。2. 动手下载前先把版本号和芯片架构敲定2.1 版本号没那么简单LTS 17 与安全更新曲表面上“下载 Corretto 17”就是认准数字 17但到了下载页面你会发现一堆类似“17.0.128”这样的编号。这里的规则很简单17 是大版本17.0.12 是具体更新版本8 是构建号。大版本决定语言特性和 API更新版本决定安全补丁和 Bug 修复。我的建议是新装环境直接下当前最新版不要下几个月甚至一年前的安装包因为 JDK 不像某些软件“够用就行”安全漏洞修复往往只在最新更新里。Corretto 官网会把最新版本默认置顶认准最新的 17.0.x 就好。为什么选 17 而不是 11 或者 21从生态角度看Java 17 是目前主流框架、安卓构建链路、大数据组件兼容性最广泛的一个档位。Spring Boot 3.x 要求 Java 17 起跳很多云原生工具链也已经把 17 当基线。21 虽然也是 LTS但部分旧依赖还没跟上11 虽然还很常见但已经处于维护后期。一句话新项目无脑 17老项目再评估。2.2 选对架构x86_64、aarch64 还是 ARM64这是下载时最容易翻车的地方没有之一。你的 CPU 是什么架构就得下什么架构的包。Windows / 绝大多数 Intel 或 AMD 台式机x64 对应 x86_64。Apple M 系列芯片选择 macOS 平台下的 AArch64 或 ARM64 版本不要在 M 系列机器上装 x64 版然后指望 Rosetta 2 帮你兜底。Linux 服务器阿里云 ECS、腾讯云 CVM、AWS EC2 等先在机器上执行uname -m输出x86_64就选 x64输出aarch64就选 ARM 版。我在服务器上下错过一次 ARM 包报错是cannot execute binary file: Exec format error那一刻真的哭笑不得。事后养成了习惯下载前先敲一条uname -m或 Windows 下的echo %PROCESSOR_ARCHITECTURE%十秒钟能省半小时。2.3 下载阶段就要注意JDK 还是 JRE现在的下载页面一般会直接给你完整 JDK包含开发工具和运行环境但也有 JRE 精简包。绝大多数场景直接选带jdk字样的包如果你只需要跑已经编译好的 jar不写代码JRE 也够用但说实话两者体积差不了多少没必要为了省空间把自己绕晕。3. 三条下载路线实测网页、命令行、包管理器3.1 官网页面下载适合偶尔装一套最直观的办法是打开 Amazon Corretto 官网选择对应的操作系统、架构和包格式页面会列出最新版本的下载按钮。需要注意一下包格式区别平台推荐格式操作特点WindowsMSI 安装包双击安装自动写注册表推荐新手Linuxtar.gz 压缩包 或 RPM/DEBtar.gz 解压即用RPM/DEB 由包管理器统一管理macOSPKG 安装包双击安装系统自动识别简单省事Windows 用户如果选 MSI安装完成后系统会自动把 Java 相关命令加入 PATH省去手动配置的麻烦。Linux 下如果你只是临时用一下tar.gz 解压到/usr/local/java/然后配一下 PATH 就行如果你想长期稳定更新更建议走后面说的包管理器路线。3.2 命令行直链下载适合脚本与容器镜像网页下载适合人肉操作但如果你要批量在几台服务器上装或者要把下载写进 Dockerfile就得用命令行。Corretto 提供了稳定的直链下载地址典型的下载方式长这样# Linux x64 平台下载最新的 Corretto 17 JDK tar.gz wget https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.tar.gz # 更通用的做法是先下载到固定目录再解压 sudo mkdir -p /usr/local/java sudo tar -xzf amazon-corretto-17-x64-linux-jdk.tar.gz -C /usr/local/javamacOS 上换成 curl 也完全一样curl -LO https://corretto.aws/downloads/latest/amazon-corretto-17-x64-macos-jdk.tar.gzWindows PowerShell 用户可以用Invoke-WebRequestInvoke-WebRequest -Uri https://corretto.aws/downloads/latest/amazon-corretto-17-x64-windows-jdk.msi -OutFile corretto17.msi这里有个细节值得多说一句/latest/这个路径会自动指向当前最新 17 版本好处是脚本永远拿到最新补丁坏处是如果你希望固定某个具体版本做可复现构建就必须写全版本号。比如wget https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.tar.gz如果你想锁定例如 17.0.12可以访问 Corretto 的版本清单页面把latest替换成具体的版本目录。我自己的习惯是个人开发机用 latest进了生产发布管道就锁定具体版本号并保存 sha256 校验值。3.3 包管理器安装适合长期使用与自动更新如果你已经受够了“手动下载 - 解压 - 配 PATH - 半年后再来一遍”的死循环包管理器是终极解法。它最大的价值不是省去下载这一步而是把安全更新接入了系统的统一更新机制。Amazon Linux 2 / AlmaLinux / RHEL 系# 导入官方 GPG key sudo rpm --import https://yum.corretto.aws/corretto.key # 添加 corretto 仓库 sudo curl -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo # 安装 JDK 17 sudo yum install -y java-17-amazon-corretto-devel装好后/usr/bin/java会自动指向 Corretto执行java -version就能看到openjdk version 17.0.x之类输出。Debian / Ubuntu 系先导入 GPG key 和 apt 源然后sudo apt update sudo apt install java-17-amazon-corretto-devel。步骤略繁琐但胜在以后apt upgrade的时候JDK 的安全补丁会跟着系统一起更新。macOS 用户brew tap corretto/corretto brew install corretto17这个 tap 是亚马逊官方维护的用 brew 管理 JDK 版本在 Mac 上非常顺手。包管理器和手动安装在日常体验上最明显的差异是也许某天系统提示有更新你顺手就升级了而手动安装的人永远不知道自己当前 JDK 有多少已知漏洞没补。3.4 顺手做完的完整性校验SHA256 与 GPG 签名下载文件损坏一般情况不多但网络抖动导致压缩包不完整的情况是真有的。解压到一半报错、运行 jshell 直接崩溃这种事我遇到过一次所以现在所有 JDK 安装包下载完都会顺手做校验。Corretto 官方每个版本都提供 SHA256 校验和文件下载链接的文件名后缀通常是.sha256或.sha256sum。Linux 下校验echo $(cat amazon-corretto-17-x64-linux-jdk.tar.gz.sha256) amazon-corretto-17-x64-linux-jdk.tar.gz | sha256sum -c -如果输出OK说明文件完整。更严格的做法是验证 GPG 签名先导入 Corretto 的签名公钥再检查.sig文件。这套流程是给生产环境准备的日常个人电脑上装一次的话至少把 SHA256 校验做了成本极低。4. 验证安装、配置环境与常见失败的现场记录4.1 三分钟后验证 Java 是否可用下载和安装最怕的是“装完了也配置了但不知道到底成没成”。我的验证顺序很简单从上到下执行java -version javac -version which java echo $JAVA_HOME正常情况下你应该看到java -version输出 openjdk 17.0.x 相关信息javac -version输出 javac 17.0.xwhich java指向你配置的 JDK 目录下的 bin/javaJAVA_HOME不是空值且指向 JDK 的根目录这里面最容易出问题的是JAVA_HOME。很多工具Maven、Gradle、Tomcat不认 PATH 里的 java而是直接找JAVA_HOME。只配 PATH 不配JAVA_HOME后面跑 Maven 迟早会报错过。4.2 Linux 与 Windows 下的 JAVA_HOME 细节Linux 下用 tar.gz 解压安装时假设解压到了/usr/local/java/amazon-corretto-17...目录那么标准配置是这样export JAVA_HOME/usr/local/java/amazon-corretto-17.0.12.x export PATH$JAVA_HOME/bin:$PATH想让配置永久生效需要写进~/.bashrc或/etc/profile。注意不要在 PATH 前面重复堆 JDK 路径容易造成混乱。Windows 上用 MSI 安装一般会帮你配好 JAVA_HOME但有一个常见坑环境变量改完之后已经打开的终端不会立即读到新值。很多人配置完发现java -version还是旧的其实是因为没重开终端。新开一个 cmd 或 PowerShell 再试试通常就好了。另外Windows 手动解压 zip 包的用户要注意注册表里可能残留之前某个 JDK 的HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft信息会导致一些老旧软件拉到错误版本。这种时候删掉残留注册表项或者用系统环境变量里Path的顺序优先控制都行。4.3 我踩过的坑架构错误、多 JDK 冲突、JRE/JDK 包选错第一个坑刚才说过架构选错。这个问题在 Apple 芯片的 Mac 上尤其常见不少教程提供的 x64 下载链接在 M 系列机器上也能运行但那是靠 Rosetta 转译JVM 性能会有损耗。你要是认真跑压测差距会变得明显。第二个坑是多版本 JDK 冲突。开发机上装了 Corretto 17 又留着 Oracle 8结果命令行里 java 指向了 8spring boot 项目直接报UnsupportedClassVersionError。这种优先检查 PATH 里 JDK 目录的顺序或者用工具统一管理。Linux 上推荐用 Update Alternativessudo update-alternatives --config java sudo update-alternatives --config javacWindows 上可以用环境变量编辑器把 Corretto 的路径调整到靠前或者卸载掉不用的旧 JDK。第三个坑是下载了 JRE 而不是 JDK。之前我图省事选了个体积小的 runtime 包结果编译项目时报javac not found。你要是需要写代码和编译一定要确认自己下的是*-devel或者*-jdk包。4.4 留意每季度的安全更新节奏Corretto 17 的安全更新节奏大致跟 OpenJDK 官方一致一般是季度性发布紧急漏洞可能随时发补丁。个人开发机你可能无感但生产环境一定要有个机制跟踪新版本最好用包管理器或者自动化脚本定期检查别手动装了就不管了。我现在维护的一个小集群就是拿 Corretto 官方仓库配好 yum 源然后每个月挑个周日统一yum update一次。这样既能拿到安全补丁又不用频繁改动配置算是我当前觉得最省心的模式。5. 一点后续可行的扩展方向最后说说后续可以怎么玩。如果你经常构建 Docker 镜像官方提供了amazoncorretto:17基础镜像Dockerfile 里直接FROM amazoncorretto:17就能获得带 JDK 17 的干净基础环境比自己手动下载解压再到镜像里配置要稳。如果你需要同时维护多个 JDK 版本可以考虑用 SDKMAN 管理它能和 Corretto 的 tap 或 tar.gz 共存切换版本也只是几条命令的事。我个人这两年用 Corretto 17 的体会是它可能不是每个场景里最惊艳的那个但绝对是最不折腾的之一。下载方式透明补丁有长期保障版本覆盖主流平台这就够了。希望这篇把下载这件事讲得让你少走点弯路。
返回列表