推荐执行 sudo pacman -s jdk-openjdk 安装最新 lts 版本 openjdk(当前为 jdk 21),并手动将 /usr/lib/jvm/default/bin 加入 path,因 arch 不自动配置环境变量。

如何用 pacman 安装 OpenJDK(不是 Oracle JDK)
Arch Linux 官方仓库只提供 OpenJDK,不打包 Oracle JDK。想装 JDK,直接选 jdk-openjdk(最新 LTS 版本)或 jdk17-openjdk 等具体版本包。
-
sudo pacman -S jdk-openjdk—— 推荐,自动装最新稳定 LTS(目前是 JDK 21) -
sudo pacman -S jdk17-openjdk—— 如果项目明确要求 JDK 17,避免升级后出问题 - 别装
jre-openjdk:它只有运行时,没有javac、javadoc等开发工具 - 装完不会自动设
JAVA_HOME,也不会改PATH,这是 Arch 的设计哲学——不隐式干预环境
为什么 java -version 显示了却 javac 找不到
常见于只装了 jre-openjdk 或装了 JDK 但 shell 没重载 PATH。Arch 中 JDK 的二进制在 /usr/lib/jvm/default/bin/,这个路径需显式加入 PATH。
- 执行
archlinux-java status查看当前默认 JVM 链接状态,输出类似:Default Java environment: jdk-openjdk - 确认
/usr/lib/jvm/default/bin/是否已在PATH中:echo $PATH | grep -o '/usr/lib/jvm/default/bin' - 如果没出现,手动加到 shell 配置里(如
~/.zshrc或~/.bashrc):export PATH="/usr/lib/jvm/default/bin:$PATH" - 别用
export JAVA_HOME=/usr/lib/jvm/default就完事——很多构建工具(如 Maven、Gradle)依赖PATH找javac,不是只读JAVA_HOME
archlinux-java 切换 JDK 版本的实际效果
它只是调整 /usr/lib/jvm/default 这个符号链接,并更新 /usr/bin/ 下的 java、javac 等命令指向。不改环境变量,也不影响已启动的 shell 进程。
- 切换后必须重新打开终端,或运行
source ~/.zshrc(或对应 shell 配置)才能让新PATH生效 -
archlinux-java set java-17-openjdk是合法命令,但注意包名是jdk17-openjdk,而运行时标识是java-17-openjdk——大小写和连字符容易输错 - 多个 JDK 共存没问题,但
default链接只能指向一个;archlinux-java status会列出所有已安装且被识别的版本 - 如果你手动删过
/usr/lib/jvm/*下的目录,archlinux-java可能无法正确识别剩余版本,此时需重装对应jdk*-openjdk包来修复注册信息
IDE(如 IntelliJ)或构建工具(Maven)仍报 JDK 不可用
它们往往绕过系统 PATH,直接查 JAVA_HOME 或硬编码路径,或者缓存了旧配置。
立即学习“Java免费学习笔记(深入)”;
- IntelliJ:File → Project Structure → Project → Project SDK → 点 “+” → “Add JDK” → 选
/usr/lib/jvm/jdk-XX-openjdk(不要选default目录,它可能被切走) - Maven:检查
mvn -v输出的 Java home 是否和archlinux-java status一致;不一致说明 Maven 启动脚本读的是自己的JAVA_HOME,需在/usr/bin/mvn或启动它的 shell 中覆盖 - Gradle:它优先读
org.gradle.java.home(在gradle.properties或命令行传入),而不是系统环境变量 - 最稳的做法:在项目根目录建
gradle.properties,写org.gradle.java.home=/usr/lib/jvm/jdk-17-openjdk,版本号按实际填
/usr/lib/jvm/default/bin。其他工具的“不识别”,几乎都是因为它们没走系统 PATH,而是自己找路径——这时候得去对应工具里手动指定真实 JDK 路径,而不是反复调 archlinux-java。










