跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    在 Fedora 上安装 Java:只有 OpenJDK 25,要 21/17 怎么办

    先给一个很多人会踩的坑:Fedora 45 的仓库里没有 Java 21,也没有 Java 17。

    Terminal window
    dnf list --available 'java-*-openjdk.x86_64'
    java-25-openjdk.x86_64 1:25.0.4.1.1-1.1.fc45
    java-latest-openjdk.x86_64 1:27.0.0.0.35-0.0.1.0.ea.fc45

    只有两个:25(当前 LTS) 和 java-latest(27 早期预览)。

    这不是装错源。对比三代仓库:

    版本提供的 JDK
    F43java-21、java-25、java-latest
    F44java-25、java-latest
    F45java-25、java-latest

    Java 21 在 F44 就被移除了。 所以照着老教程 dnf install java-21-openjdk 会得到 No match for argument。

    Terminal window
    sudo dnf install java-25-openjdk

    只跑服务端程序可以装更小的 headless:

    Terminal window
    sudo dnf install java-25-openjdk-headless

    验证:

    Terminal window
    java -version
    openjdk version "25.0.4.1" 2026-08-18
    OpenJDK Runtime Environment (Red_Hat-25.0.4.1.1-1) (build 25.0.4.1+1)
    OpenJDK 64-Bit Server VM (Red_Hat-25.0.4.1.1-1) (build 25.0.4.1+1, mixed mode, sharing)

    装到哪了:

    Terminal window
    readlink -f "$(command -v java)"
    java -XshowSettings:properties -version 2>&1 | grep java.home
    /usr/lib/jvm/java-25-openjdk/bin/java
    java.home = /usr/lib/jvm/java-25-openjdk

    很多构建工具(Maven、Gradle、Tomcat)依赖 JAVA_HOME,而 Fedora 默认不设:

    Terminal window
    echo $JAVA_HOME # 空

    写进 profile:

    Terminal window
    sudo tee /etc/profile.d/java.sh >/dev/null <<'EOF'
    export JAVA_HOME=/usr/lib/jvm/java-25-openjdk
    export PATH=$JAVA_HOME/bin:$PATH
    EOF
    source /etc/profile.d/java.sh
    echo $JAVA_HOME
    Terminal window
    cat > Hello.java <<'EOF'
    public class Hello {
    public static void main(String[] args) {
    System.out.println("Java " + System.getProperty("java.version"));
    }
    }
    EOF
    java Hello.java

    JDK 11 之后支持单文件直接运行,不需要先 javac:

    Java 25.0.4.1

    仓库里没有,只有三条路:

    Terminal window
    podman run --rm eclipse-temurin:21-jdk java -version

    应用跑在容器里,宿主机不用装旧 JDK。这也是 Fedora 官方推荐的方向。

    二、上游 tarball(要本机 JDK 时)

    Section titled “二、上游 tarball(要本机 JDK 时)”
    Terminal window
    mkdir -p ~/jdk && cd ~/jdk
    curl -LO https://github.com/adoptium/temurin21-binaries/releases/latest/download/OpenJDK21U-jdk_x64_linux_hotspot.tar.gz
    tar xzf OpenJDK21U-jdk_x64_linux_hotspot.tar.gz
    export JAVA_HOME=~/jdk/jdk-21*
    $JAVA_HOME/bin/java -version

    三、SDKMAN(开发机多版本切换)

    Section titled “三、SDKMAN(开发机多版本切换)”
    Terminal window
    curl -s "https://get.sdkman.io" | bash
    source ~/.sdkman/bin/sdkman-init.sh
    sdk install java 21.0.5-tem
    sdk use java 21.0.5-tem

    适合需要频繁在 17/21/25 之间切换的开发场景。

    现象原因
    No match for argument: java-21-openjdkF44 起已移除,不是源的问题
    JAVA_HOME 是空的Fedora 不默认设置,要自己写 profile
    装了 JDK 但 java 找不到只装了 -headless 且没装 JRE 包,或 PATH 未含 $JAVA_HOME/bin
    两个 JDK 并存时版本不对用 update-alternatives --config java 或直接改 JAVA_HOME