最直接准确的是用 dnf list available | grep -i "java-.*openjdk"(CentOS 8+/RHEL 8+/Rocky/AlmaLinux)或 yum list available | grep -i "java-.*openjdk"(CentOS 7/RHEL 7)查看软件源中所有可用OpenJDK版本,包名中的数字即主版本号,需结合devel等后缀判断是否含javac及适用场景。

用 yum list 查看 OpenJDK 可用版本(CentOS/RHEL/Rocky/AlmaLinux)
系统软件源里有哪些 OpenJDK 版本,直接查包管理器最准,不用猜、不依赖外部镜像站。不同发行版命令略有差异,但核心逻辑一致:列出所有匹配 java- 或 openjdk 的可安装包。
-
yum list available | grep -i "java-.*openjdk"(CentOS 7 / RHEL 7) -
dnf list available | grep -i "java-.*openjdk"(CentOS 8+ / RHEL 8+ / Rocky/Alma) - 如果只想看 JDK 开发套件(含
javac),加devel过滤:dnf list available | grep "java-.*openjdk.*devel" - 输出中第二列是版本号,例如
java-17-openjdk-devel.x86_64表示 OpenJDK 17 的开发包;java-11-openjdk-headless表示无图形界面的 JRE 运行时
用 apt-cache search 查看 OpenJDK 可用版本(Ubuntu/Debian)
Debian 系发行版用 apt,但注意:默认只显示已索引的包,需先确保源列表最新。
- 更新本地包索引:
sudo apt update - 搜索 OpenJDK 相关包:
apt-cache search "^openjdk-[0-9]*-jdk$" | sort - 常见结果如:
openjdk-11-jdk、openjdk-17-jdk、openjdk-21-jdk—— 数字即主版本号 - 若想看更详细描述(比如是否含
headless或source),可用:apt-cache show openjdk-17-jdk
为什么 java -version 不能代替查源?
java -version 只告诉你当前 PATH 里哪个 Java 在生效,和“软件源里有什么”是两件事。容易踩的坑:
- 系统已装 OpenJDK 11,但你想装 17,却没查源就直接
sudo dnf install java-17-openjdk—— 可能报错“没有匹配的包”,其实是包名不对(正确是java-17-openjdk-devel才带编译器) - 某些旧版 CentOS 7 的 base 源里只有 OpenJDK 8,
dnf list查不到 11/17,得手动启用epel或PowerTools仓库 -
yum search openjdk返回一堆无关结果(比如python-javapackages),不如用grep精确过滤包名结构
查到版本后怎么选?关键看用途
不是最新版就一定好,OpenJDK 各版本生命周期和组件覆盖差异很大:
- 需要
javac编译 Java 代码?必须装带devel后缀的包(如java-17-openjdk-devel),光装headless或jre不行 - 部署 Spring Boot 3.x 应用?最低要求 JDK 17,
java-11-openjdk会启动失败,报UnsupportedClassVersionError - 系统默认用
java-1.8.0-openjdk,但你装了java-17-openjdk,它不会自动切换 —— 得用update-alternatives --config java手动选 - 某些容器基础镜像(如
centos:stream9)默认不带 JDK,dnf list查到包也不代表已预装,得自己dnf install
真正麻烦的不是找不到版本,而是装完发现缺 javac、没 JAVA_HOME、或者多个版本共存时 java 和 javac 版本不一致 —— 这些都得靠查源时盯紧包名后缀和依赖关系。











