【2026版】macOS 使用 Homebrew 快速安装 Java 21 教程

在 macOS 上配置 Java 环境时,很多开发者会遇到 no bottle available 或环境变量配置失效的问题。本文将介绍目前最稳定、最推荐的安装方式:使用 Homebrew Cask 安装 Eclipse Temurin

为什么选择 Temurin?

  • 兼容性好:前身为 AdoptOpenJDK,是目前最主流的 OpenJDK 发行版。
  • 安装简单 :使用 Cask 安装会自动放入系统目录,无需手动配置繁琐的 PATH
  • 识别率高:IntelliJ IDEA、Eclipse 等 IDE 可以直接识别,无需寻找隐藏路径。

🚀 安装步骤

1. 确保 Homebrew 已更新

在安装任何新软件包之前,建议先更新 Homebrew 索引:

bash 复制代码
brew update

2. 执行安装命令

直接在终端输入以下正确命令:

bash 复制代码
brew install --cask temurin@21

注:使用 --cask 会直接下载预编译好的 .pkg 安装包,避开复杂的源码编译过程。

3. 验证安装

安装完成后,无需重启电脑 ,只需新开一个终端窗口或执行 source,然后输入:

bash 复制代码
java -version

预期输出:

openjdk version "21.x.x" ...

Runtime Environment Temurin-21...


🛠 进阶技巧:多版本管理

如果你电脑上同时需要 Java 8, 11 和 21,可以按照以下逻辑操作:

1. 安装其他版本

bash 复制代码
brew install --cask temurin@8
brew install --cask temurin@17

2. 快速切换版本

macOS 提供了一个强大的工具 /usr/libexec/java_home 来定位不同版本。你可以通过在 ~/.zshrc 中添加别名来快速切换:

bash 复制代码
# 编辑配置文件
nano ~/.zshrc

# 添加以下内容(按需开启)
export JAVA_21_HOME=$(/usr/libexec/java_home -v 21)
export JAVA_8_HOME=$(/usr/libexec/java_home -v 1.8)

# 默认使用 Java 21
export JAVA_HOME=$JAVA_21_HOME

# 保存退出后运行
source ~/.zshrc

❓ 常见问题排查

  • 提示 "Permission Denied"?
    安装 Cask 软件通常需要系统管理员权限,请在提示时输入你的 Mac 开机密码。
  • IDE 找不到 JDK?
    Temurin 默认安装在 /Library/Java/JavaVirtualMachines/。在 IntelliJ IDEA 中,点击 Project Structure -> SDKs -> + 号,直接指向该目录即可。
  • 之前手动删过 Java 删不干净?
    如果之前乱删导致安装失败,可以参考 macOS 完全卸载 Java 教程 先进行彻底清理。
相关推荐
南极星100513 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言
消失的旧时光-194313 小时前
第十三课:权限系统如何设计?——RBAC 与 Spring Security 架构
java·架构·spring security·rbac
baidu_2474386113 小时前
Android ViewModel定时任务
android·开发语言·javascript
Dev7z13 小时前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
不能隔夜的咖喱13 小时前
牛客网刷题(2)
java·开发语言·算法
serve the people13 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源13 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
lekami_兰13 小时前
Java 并发工具类详解:4 大核心工具 + 实战场景,告别 synchronized
java·并发工具
有位神秘人13 小时前
Android中Notification的使用详解
android·java·javascript
肉包_51114 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++