怎么使用Homebrew在Mac上快速安装和切换JDK版本
/usr/libexec/java_home工具与Shell别名函数,实现终端里一条命令即可毫秒级切换JDK版本。
一、Mac多版本JDK的工作原理
很多初学者在Mac上手工去下载各个厂商的.dmg安装包,不仅更新麻烦,而且由于各个发行版的环境变量配置不一致,很容易引发$JAVA_HOME冲突或命令覆盖问题。
在macOS中,官方标准的多JDK安装目录位于/Library/Java/JavaVirtualMachines/。无论你装了多少个版本,苹果系统自带的内置工具/usr/libexec/java_home都会自动扫描该目录下的所有有效JDK,并能根据参数直接返回对应版本的物理绝对路径。当我们使用Homebrew的Cask机制安装由社区广泛推荐的Eclipse Temurin(前身为AdoptOpenJDK)时,它会自动将解压后的文件注册到这个标准路径下。这样一来,包管理负责安装卸载,系统命令负责查找识别,Shell负责环境变量绑定,整体结构非常清晰。
二、使用Homebrew快速安装指定JDK
在开始之前,确保你的Mac终端已经配置好Homebrew。主流的OpenJDK发行版中,Eclipse Temurin稳定性与兼容性表现优异,也是Homebrew官方仓库重点维护的JDK发行版。
首先,我们需要在终端中运行以下命令更新仓库索引,并查看当前官方源支持的Temurin具体版本:
# 更新Homebrew本地索引
brew update
# 检索可用的Temurin发行版本
brew search temurin
你会在终端输出中看到类似 temurin(通常代表当前最新长期支持LTS版本)、temurin@8、temurin@11、temurin@17、temurin@21 等包名。根据工程需求,执行安装命令。比如我们需要常用的 Java 8、Java 17 和 Java 21:
# 安装旧项目需要的 Java 8
brew install --cask temurin@8
# 安装当前主流 LTS Java 17
brew install --cask temurin@17
# 安装新项目选用的 Java 21
brew install --cask temurin@21
/Library/Java/JavaVirtualMachines/ 目录下,因此终端可能会弹出输入Mac开机密码(Sudo授权)的提示,在此输入密码并回车即可。
三、检查系统中已装的全部JDK
安装完成后,不需要去系统偏好设置找面板。直接在终端执行 macOS 提供的定位命令:
/usr/libexec/java_home -V
注意参数是大写的 -V。终端会输出当前系统中所有已被识别的JDK清单,示例结果如下:
Matching Java Virtual Machines (3):
21.0.2 (arm64) "Eclipse Adoptium" - "OpenJDK 21.0.2" /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
17.0.10 (arm64) "Eclipse Adoptium" - "OpenJDK 17.0.10" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
1.8.0_402 (arm64) "Eclipse Adoptium" - "OpenJDK 8" /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
最后一行输出的是当前系统默认激活的JDK路径。可以看到,刚才通过Homebrew安装的各个版本已经规范地排列在了系统目录下。
四、配置Shell环境,实现快速一键切换
如果在终端手动敲长长的路径去设置 export JAVA_HOME=...,每次切换都很低效。我们可以把切换逻辑抽象为简短的别名(alias)或自定义命令,写入你的Shell配置文件中。
macOS 目前默认的终端Shell是 Zsh(配置文件为 ~/.zshrc);如果你还在使用老版本的 Bash,配置文件则为 ~/.bash_profile。下面以标准的 ~/.zshrc 为例说明操作步骤:
- 使用文本编辑器打开配置文件(如使用vim或nano):
nano ~/.zshrc - 在文件末尾添加以下内容:
# 设置系统默认启动的 JDK 版本(例如默认设为 Java 17) export JAVA_HOME=$(/usr/libexec/java_home -v 17) # 定义快捷切换函数 alias jdk8="export JAVA_HOME=$(/usr/libexec/java_home -v 1.8); java -version" alias jdk17="export JAVA_HOME=$(/usr/libexec/java_home -v 17); java -version" alias jdk21="export JAVA_HOME=$(/usr/libexec/java_home -v 21); java -version" - 保存文件后,在当前终端执行以下命令让配置立即生效:
source ~/.zshrc
java_home 命令中识别的版本号参数是 1.8,而更高版本的 Java 17、21 则直接传主版本数字 17、21 即可。
现在,当你在终端需要用 Java 8 编译旧模块时,只要直接敲入命令:
jdk8
终端会立即切换环境变量,并在下一行输出当前 Java 8 的版本信息。同理,输入 jdk21 就会毫秒级切回 Java 21。整个切换只作用于当前终端窗口,不会污染其他正在执行的构建进程。
五、遇到常见问题时的检查方案
在实际使用中,有两个环节最容易出现困惑:
- 切换命令执行后,java -version 依然显示老版本:通常是因为你的
~/.zshrc中后面有写死的export PATH="/some/fixed/jdk/bin:$PATH",导致固定的路径优先于系统动态寻址。排查方法是检查配置文件,确保由$JAVA_HOME/bin动态解析,或者直接只依赖export JAVA_HOME=...。 - 不需要某个JDK时如何彻底干净卸载:使用 Homebrew 安装的一大好处就是便于卸载。直接运行
brew uninstall --cask temurin@8,Homebrew 会自动删除/Library/Java/JavaVirtualMachines/对应的文件夹,无需手动查找残余文件。
六、全流程总结清单
整个流程规范下来,其实只需要核心的几步。无论你是全新配置一台Mac,还是整理已有的开发环境,按照下面的清单核对即可快速就绪。
通过这套方案,你可以彻底告别手工到处下载安装包、环境变量配置混乱的烦恼。只要保持包管理与系统原生工具的分工配合,无论后续需要新增 JDK 25 还是清理弃用版本,都能在数秒内条理分明地完成。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













