运行 yum repolist 查看启用的仓库,centos 7 需启用 powertools,centos 8+ 默认无 openjdk 8,需手动添加 oracle jdk 或使用特定镜像;装 java-1.8.0-openjdk-devel 才含 javac 等开发工具;用 alternatives --config java/javac 统一版本并设 java_home=/usr/lib/jvm/java-1.8.0-openjdk。

怎么确认系统用的是哪个Yum源,以及它是否带JDK 8
CentOS 7 默认的 base 源里确实有 java-1.8.0-openjdk,但 CentOS 8+ 已弃用 Yum 改用 DNF,且默认源中 OpenJDK 8 被移除——不是你操作错了,是源本身没这个包。
常见错误现象:yum install java-1.8.0-openjdk 报 No package java-1.8.0-openjdk available,尤其在 CentOS 8/Stream 或启用了 EPEL 但没开 PowerTools 的机器上。
- 先运行
yum repolist看当前启用的仓库名,重点关注baseos、appstream、epel、powertools(CentOS 7)或crb(CentOS 8+) - CentOS 7:确保
powertools已启用(yum config-manager --set-enabled powertools) - CentOS 8+:OpenJDK 8 不在默认源,得手动加 Oracle JDK 或用
dnf install java-1.8.0-openjdk-headless(仅限部分镜像站,不保证稳定)
为什么装 java-1.8.0-openjdk-devel 而不是只装 java-1.8.0-openjdk
只装 java-1.8.0-openjdk 只提供 JRE,没有 javac、jar、javadoc 这些开发工具——如果你要编译 Java 代码、跑 Maven、打包 WAR,会立刻报 command not found: javac。
使用场景很直接:部署 Spring Boot 应用、运行 Jenkins slave、构建 CI 流水线,都依赖完整的 JDK。
-
java-1.8.0-openjdk→ 仅运行时(java命令可用) -
java-1.8.0-openjdk-devel→ 含javac、头文件、调试工具,生产部署建议装这个 - 装完后验证:
java -version和javac -version输出应一致,且主版本号为1.8.0
alternatives --config java 什么时候必须用,又容易出什么错
系统可能预装了多个 Java 版本(比如自带的 OpenJDK 11 + 你新装的 8),不显式配置,默认 java 命令可能指向高版本,导致应用启动失败(如老项目不兼容 JDK 11 的 TLS 默认行为)。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
典型错误现象:java -version 显示 11,但 yum list installed | grep jdk 明明装了 8;或者 Tomcat 启动报 UnsupportedClassVersionError。
- 执行
alternatives --config java和alternatives --config javac分别选中 JDK 8 对应路径(通常是/usr/lib/jvm/java-1.8.0-openjdk-*/jre/bin/java) - 注意:只改
java不改javac,会导致编译和运行环境不一致,CI 构建通过但运行时报错 - 改完后检查
which java是否指向/usr/bin/java(软链),再看readlink -f $(which java)确认真实路径
安装后 JAVA_HOME 怎么设才不踩坑
很多脚本(比如 Tomcat 的 catalina.sh、Maven 的 mvn)依赖 JAVA_HOME 环境变量,但它不能指向 /usr/bin/java,也不能硬写死具体小版本路径(如 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-1.el7_9.x86_64),否则下次 Yum 升级就断掉。
正确做法是用 OpenJDK 提供的通用符号路径:
- 标准路径是
/usr/lib/jvm/java-1.8.0-openjdk(不含小版本号)——这是 Yum 安装后自动创建的稳定软链 - 写进
/etc/profile.d/java.sh:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export PATH=$JAVA_HOME/bin:$PATH
- 别用
update-alternatives --install手动注册JAVA_HOME,它不管理环境变量,只管命令软链
最常被忽略的一点:改完 JAVA_HOME 后,systemd 服务(如 tomcat.service)默认不读 /etc/profile.d/,得在 service 文件里显式写 Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










