Java在Linux中通过yum安装环境的完整指南

Java不能通过yum直接安装可用的JDK环境,因默认仓库仅提供OpenJDK且不配置JAVA_HOME和PATH,必须用dnf安装java-17-openjdk-devel并手动设置环境变量。

Java 不能通过 yum 直接安装“JDK 环境”——因为主流 Linux 发行版(如 CentOS/RHEL 8+、AlmaLinux、Rocky Linux)的默认仓库中,yum(或 dnf)提供的 java-11-openjdk-develjava-17-openjdk-devel 是 OpenJDK,不是 Oracle JDK;且安装后不会自动配置 JAVA_HOME 或修改 PATH,必须手动补全,否则 javac 找不到、构建工具(如 Maven/Gradle)会失败。

确认系统版本和包管理器类型

CentOS 8+、RHEL 8+、Fedora 及其衍生版已弃用 yum,实际调用的是 dnf。运行 yum --version 可能显示 dnf 版本号。误用过时文档会导致命令报错或装错包。

  • 检查命令:运行 cat /etc/redhat-releaserpm -q centos-linux-release
  • 区分命令:RHEL/CentOS 7 用 yum;8+ 必须用 dnfyum 是软链接,但行为以 dnf 为准)
  • 注意仓库状态:AlmaLinux/Rocky 默认启用 appstream 仓库,OpenJDK 包在此仓库中,禁用后 dnf install java-17-openjdk-devel 会提示 “No match for argument”

安装 OpenJDK 开发包(含 javac)

只装 java-17-openjdk(JRE)不行——它不含 javacjavadocjar 等开发工具,Maven 编译直接失败。必须装 -devel 后缀的包。

  • 推荐命令(RHEL/CentOS 8+、AlmaLinux 8+):sudo dnf install java-17-openjdk-devel
  • 如需 Java 11(LTS):sudo dnf install java-11-openjdk-devel
  • 验证是否装全:ls $JAVA_HOME/bin/javac 会报错(因 JAVA_HOME 尚未设),改用 rpm -ql java-17-openjdk-devel | grep bin/javac 查看路径
  • 典型安装路径为 /usr/lib/jvm/java-17-openjdk-*/bin/javac,其中星号匹配具体更新版本(如 17.0.1.0.12-2.el9_1

手动设置 JAVA_HOME 和 PATH

dnf install 不写入任何环境变量。很多教程教用 alternatives --config java,但这只影响 java 命令软链,对 JAVA_HOME 和构建工具完全无效。

  • 查真实 JDK 路径:dirname $(dirname $(readlink -f $(which javac)))(返回类似 /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el9_1.x86_64
  • 写入全局环境(推荐):
    echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' | sudo tee -a /etc/profile.d/java.sh
    echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.sh
    sudo chmod +x /etc/profile.d/java.sh
  • 立即生效:source /etc/profile.d/java.sh,然后运行 echo $JAVA_HOMEjavac -version 验证
  • 注意:/usr/lib/jvm/java-17-openjdk 是符号链接,指向带版本号的实际目录,dnf update 后仍有效

验证是否真可用(别被 “java -version” 蒙蔽)

java -version 成功 ≠ 开发环境就绪。常见假成功:PATH 里有旧 JDK 的 java,但 javac 是另一个版本,或 JAVA_HOME 指向错误路径,导致 Maven 报 Unsupported class file major version

  • 必须同时验证三者:java -versionjavac -versionecho $JAVA_HOME 输出路径是否一致
  • 检查 javac 所属 JDK:readlink -f $(which javac) 应输出 $JAVA_HOME/bin/javac
  • Maven 用户额外验证:mvn -v 输出的 “Java version” 必须与 java -version 完全一致(包括构建号)
  • 若用 IDE(如 IntelliJ),需在设置中手动指定 Project SDK 为 /usr/lib/jvm/java-17-openjdk,不能依赖系统自动探测

最常被跳过的一步是验证 javacJAVA_HOME 的路径一致性——装完不检查,等到 CI 构建失败才回头找,浪费大量时间。