默认执行 dnf install java 安装的是 java-17-openjdk-headless(fedora 38+),仅为jre运行时,不含 javac 等开发工具;开发需明确安装 java-17-openjdk-devel。

dnf install java 默认装的是哪个版本?
默认执行 dnf install java 会安装 java-17-openjdk-headless(Fedora 38+),不是 JDK 全套,也不含 javac。实际是 JRE 运行时,连编译器都没有——这点和 Ubuntu 的 apt install default-jre 类似,容易误以为“装好了 Java”。
- 真正开发用,得明确指定 JDK:运行
dnf install java-17-openjdk-devel - 想装最新 LTS(Java 21)?先查可用包:
dnf search openjdk | grep -i "devel\|21" - Fedora 默认禁用 non-free 仓库,
java-21-openjdk-devel在updates-testing或rpmfusion-free中,需手动启用
如何确认已安装的 Java 版本和 JAVA_HOME?
java -version 只显示运行时版本,不反映 JAVA_HOME 设置是否生效。Fedora 使用 alternatives 管理多版本 Java,JAVA_HOME 不会自动设置,必须手动配。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 查当前默认 Java 路径:
readlink -f $(which java)→ 通常输出类似/usr/lib/jvm/java-17-openjdk-17.0.1.12-2.fc38.x86_64/bin/java - 设
JAVA_HOME:取上一步路径的父目录(去掉最后两级),即/usr/lib/jvm/java-17-openjdk-17.0.1.12-2.fc38.x86_64 - 写入 shell 配置:
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.12-2.fc38.x86_64' >> ~/.bashrc,然后source ~/.bashrc - 验证:
echo $JAVA_HOME和$JAVA_HOME/bin/javac -version
多个 Java 版本共存时怎么切换?
Fedora 的 alternatives 系统管理 java、javac、jar 等命令链接,但不会同步更新 JAVA_HOME ——这是最常被忽略的坑。
- 列出所有 Java 版本:
sudo alternatives --config java - 切换后,
java -version和javac -version会变,但$JAVA_HOME仍指向旧路径 - 必须手动更新
JAVA_HOME:建议用符号链接统一管理,例如sudo ln -sf /usr/lib/jvm/java-21-openjdk /usr/lib/jvm/default-jvm,再把JAVA_HOME指向/usr/lib/jvm/default-jvm - 避免每次改配置文件,可写个简单函数放进
~/.bashrc:set-java-home() { export JAVA_HOME=/usr/lib/jvm/$1; },用时直接set-java-home java-21-openjdk
为什么 Maven/Gradle 报 “Could not determine java version”?
常见于 CI 环境或新用户 shell 启动脚本未加载完整,JAVA_HOME 设了但没被子进程继承,或者用了 sudo 导致环境变量丢失。
- 检查是否在 root 下运行构建工具:
sudo会重置环境变量,改用sudo -E保留JAVA_HOME - 确认
JAVA_HOME对当前 shell 有效:env | grep JAVA_HOME;若为空,说明没 source 或写错位置(比如写在~/.profile但你用的是 bash) - Maven 默认只认
JAVA_HOME,不读PATH;即使java -version正确,mvn -v仍可能失败 - Gradle 8+ 支持
org.gradle.java.home配置项,可在gradle.properties中硬编码,绕过环境变量依赖
JAVA_HOME 和 alternatives 的配合。多数问题不出在安装本身,而出在路径没对齐、环境变量没继承、版本没同步——这些细节不显眼,但卡住就是一整天。Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










