必须将JAVA_HOME设为JDK根目录(如/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.fc39.x86_64),不可指向bin子目录;通过/etc/profile.d/java21.sh系统级配置,确保PATH以$JAVA_HOME/bin开头,并用source加载后验证echo $JAVA_HOME、java -version及which java全部一致。

在Fedora 39上让Maven、Tomcat或IDE识别OpenJDK 21,必须正确设置JAVA_HOME指向JDK根目录而非bin子目录,否则构建失败或报“JAVA_HOME not set”错误;系统级配置可避免每个用户重复设置,且重启终端后自动生效。
确认OpenJDK 21已安装并定位路径
执行sudo dnf install java-21-openjdk-devel完成安装后,运行readlink -f $(which java)获取真实路径,输出形如/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.fc39.x86_64/bin/java;去掉末尾/bin/java部分,得到JAVA_HOME应设为的路径:【/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.fc39.x86_64】。这一步不能靠猜或ls /usr/lib/jvm硬找——不同更新版本的文件夹名含精确时间戳和构建号,手动拼错会导致后续全部失效。
创建系统级环境配置脚本
用sudo权限新建配置文件:sudo nano /etc/profile.d/java21.sh。
在文件中写入两行内容:
立即学习“Java免费学习笔记(深入)”;
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-1.fc39.x86_64
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
export PATH=$JAVA_HOME/bin:$PATH
注意:PATH赋值要把$JAVA_HOME/bin放在最前面,否则系统可能优先调用旧版Java(比如已装的17或11),导致java -version显示正确但Maven仍报错。
加载配置并验证结果
第一步:立即加载新配置:source /etc/profile.d/java21.sh。
第二步:检查变量是否生效:echo $JAVA_HOME → 必须精确输出上一步设定的完整路径。
第三步:验证命令链路:java -version → 显示openjdk version "21";javac -version → 输出一致的21版本号;which java → 返回路径应位于$JAVA_HOME/bin下。
若其中任一命令失败,说明PATH未生效或JAVA_HOME路径有误,需返回前两步核对。

















