homebrew 默认安装 openjdk 最新稳定版(如 jdk 22),非 lts 版本;需显式执行 brew install openjdk@17 或 brew install openjdk@21 安装 lts 版,并手动配置 path 和 java_home 才能被系统及 ide 正确识别。

brew install java 为什么装出来的不是 JDK 17 或 21?
Homebrew 默认安装的是 openjdk 的最新稳定版,但这个“最新”不等于“LTS 最新版”。比如当前 brew install openjdk 装的是 JDK 22(非 LTS),而多数项目仍依赖 JDK 17 或 21。直接运行 brew install java 会失败——因为 Homebrew 已废弃 java 公式,现在必须明确指定版本或使用 openjdk。
- 装 LTS 版本:用
brew install openjdk@17或brew install openjdk@21 - 装完后不会自动软链到
/usr/bin/java,得手动配置$PATH - 多个 JDK 共存时,
java -version显示的版本取决于$PATH中哪个bin目录排最前
如何让系统默认用 brew 安装的 JDK?
Homebrew 安装的 JDK 默认放在 /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk(Apple Silicon)或 /usr/local/opt/openjdk@17/libexec/openjdk.jdk(Intel),但 macOS 不会自动识别它为系统 Java。关键动作是把对应 bin 目录加进 $PATH,且位置要比系统自带的 /usr/bin 靠前。
- 在
~/.zshrc(或~/.bash_profile)里加一行:export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH" - 执行
source ~/.zshrc生效,再运行which java应该返回/opt/homebrew/opt/openjdk@17/bin/java - 别漏掉
export JAVA_HOME=$(/opt/homebrew/opt/openjdk@17/libexec/java_home),否则 Maven、Gradle 等工具可能找不到 JDK
java_home 命令返回空或报错怎么办?
/usr/libexec/java_home 是 macOS 自带的工具,但它只识别 Apple 官方 JDK 或通过 .pkg 安装的 JDK,对 Homebrew 安装的 JDK 默认不可见——除非你用的是 openjdk 公式(它会注册到 java_home),而不是旧的 adoptopenjdk 或手动解压包。
- 确认是否装对了公式:
brew info openjdk@17输出里要有java_home相关说明 - 如果
/opt/homebrew/opt/openjdk@17/libexec/java_home存在,就直接用它替代系统命令 - 常见错误:
No Java runtime present—— 这说明java_home没扫描到任何 JDK,不是路径问题,是注册缺失
为什么 IntelliJ 或 VS Code 仍提示“JDK not found”?
IDE 不读 shell 的 $PATH 或 $JAVA_HOME,尤其 GUI 启动时继承的是登录会话环境,而 zsh 配置对 GUI 进程默认不生效。这不是 IDE 配置错了,是环境变量根本没传进去。
立即学习“Java免费学习笔记(深入)”;
- VS Code:从终端用
code .启动,它才能继承当前 shell 环境 - IntelliJ:在
Help > Edit Custom Properties里加idea.jvm.options不顶用;正确做法是在Help > Edit Custom VM Options里指定 JVM,或在项目 SDK 设置中手动指向/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home - 别信“重启电脑就能解决”,GUI 环境变量要靠
launchctl setenv或改~/.zprofile才能持久生效
$PATH,有的查 java_home,有的硬编码路径。盯住一个点反复试,不如先搞清当前这一步到底在问谁要 JDK。










