OpenJDK安装时只显示java-1.8.0-openjdk是因为该包仅为JRE运行时环境,不含javac等开发工具;需安装对应-devel(RHEL系)或-jdk(Debian系)包才能获得完整JDK功能。

装 OpenJDK 时只看到 java-1.8.0-openjdk,为什么没有 javac?
因为这个包名默认安装的是 JRE,不是 JDK。在主流 Linux 发行版(如 openEuler、CentOS、Fedora)的仓库中,java-1.8.0-openjdk 是运行时环境包,只含 java 命令和 JVM,不含 javac、javadoc 等开发工具。
常见错误现象:
javac: command not found-
which javac返回空 -
java -version显示Runtime Environment,但没提Development Kit
解决办法很简单:换包名安装完整 JDK:
- openEuler / CentOS 8+ / Fedora:
dnf install java-1.8.0-openjdk-devel - ARM64(aarch64)系统必须加架构后缀:
dnf install java-1.8.0-openjdk-devel.aarch64 - Ubuntu/Debian:
apt install openjdk-17-jdk(注意是-jdk,不是-jre)
OpenJDK 17+ 安装后为什么还是找不到 javac?检查 PATH 和多版本共存
即使装了 openjdk-17-jdk 或 java-17-openjdk-devel,javac 仍不可用,大概率是 PATH 没指向正确目录,或系统存在多个 Java 版本冲突。
关键检查步骤:
- 执行
update-alternatives --config java和update-alternatives --config javac(Debian/Ubuntu)或alternatives --config java(RHEL/openEuler),确认两者指向同一 JDK 根目录 - 查
javac实际路径:find /usr/lib/jvm -name javac 2>/dev/null,再看该路径是否在$PATH中 - 避免手动改
/etc/profile时写错路径,推荐用export JAVA_HOME=/usr/lib/jvm/java-17-openjdk+export PATH=$JAVA_HOME/bin:$PATH
注意:java -version 和 javac -version 输出的版本号必须一致,否则说明环境没对齐。
JDK 11+ 里“JRE”去哪了?别再找 jre/ 目录
JDK 9 起,Oracle 和主流 OpenJDK 发行版(Temurin、Zulu、Corretto)已移除独立的 jre/ 子目录。JDK 11+ 默认不带 $JAVA_HOME/jre,所有运行时能力都通过模块系统提供。
这意味着:
- 你不能再依赖
$JAVA_HOME/jre/bin/java,一律用$JAVA_HOME/bin/java -
java --list-modules可验证运行时完整性;JDK 环境下一定包含jdk.compiler,JRE 环境则缺失 - 容器部署(如 Docker)直接用
eclipse-temurin:17-jdk-jammy镜像即可,无需“精简成 JRE”——体积差异微乎其微,且丢掉jstack、jstat等诊断工具得不偿失
只运行 jar 包,到底该装 JDK 还是 JRE?
现在基本不用单独装 JRE。原因很实际:
- Oracle 自 JDK 9 起停止发布独立 JRE;主流 OpenJDK 发行版(2026 年)全部取消 JRE 下载项
- Linux 包管理器里所谓 “JRE 包”,本质是阉割版 JDK(去掉编译器、文档等),但 JVM 和类库完全一样
- 生产环境跑 Spring Boot 服务时,常需
jcmd查线程、jstat看 GC,这些都在 JDK 里,不在旧式 JRE 中 - CI/CD 流水线里统一用 JDK,省去开发/测试/生产环境不一致带来的诡异问题
所以结论很直白:无论开发还是部署,直接装对应版本的 JDK 就行。唯一需要警惕的,是别把 -devel 或 -jdk 包名看漏了——那是你拿到 javac 的唯一门票。


















