【Mac快速切换JDK】Mac 使用 Homebrew + jenv 快速切换 JDK 版本

Mac 开发时经常需要在 JDK 8、17、21 之间切换。使用 jenv 可以不用反复修改 JAVA_HOME,切换起来比较方便。

一、查看当前安装的 JDK

复制代码
/usr/libexec/java_home -V

例如:

复制代码
21.0.10 (arm64) "Microsoft"
17.0.19 (arm64) "Homebrew"
17.0.19 (arm64) "Microsoft"
1.8.0_492 (arm64) "Amazon"

说明电脑上已经安装了 JDK 8、17、21。


二、安装 jenv

如果还没有安装:

复制代码
brew install jenv

配置环境变量:

复制代码
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
source ~/.zshrc

检查:

复制代码
jenv --version

三、把 JDK 添加到 jenv

使用实际的 JDK 路径,不要直接复制 xxx.jdk。

例如 JDK 21:

复制代码
jenv add /Users/liangchen/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home

JDK 17:

复制代码
jenv add /opt/homebrew/Cellar/openjdk@17/17.0.19/libexec/openjdk.jdk/Contents/Home

JDK 8:

复制代码
jenv add /Users/liangchen/Library/Java/JavaVirtualMachines/corretto-1.8.0_492/Contents/Home

查看已经添加的版本:

复制代码
jenv versions

四、切换 JDK

切换到 JDK 21:

复制代码
jenv global 21

切换到 JDK 17:

复制代码
jenv global 17

切换到 JDK 8:

复制代码
jenv global 1.8

查看当前 jenv 使用的版本:

复制代码
jenv version

再确认 Java:

复制代码
java -version

五、如果切换后还是原来的 JDK

例如执行:

复制代码
jenv global 21
java -version

结果仍然显示 JDK 17。

这种情况通常是 jenv 已经切换了,但终端的 PATH/JAVA_HOME 仍然指向其他 JDK。

先执行:

复制代码
jenv enable-plugin export

然后:

复制代码
source ~/.zshrc

再检查:

复制代码
jenv version
which java
java -version
echo $JAVA_HOME

正常情况下,which java 应该指向:

复制代码
/Users/你的用户名/.jenv/versions/21/bin/java

而不是:

复制代码
/opt/homebrew/...

如果还是不对,可以检查:

复制代码
grep -n "JAVA_HOME\|java\|jenv" ~/.zshrc

如果 .zshrc 里面存在手动设置的:

复制代码
export JAVA_HOME=...
export PATH=...

可能会覆盖 jenv 的配置,需要调整这些配置。


六、项目单独使用指定 JDK

如果不同项目需要不同 JDK,不建议每次使用 global 切换,可以使用 local。

例如进入 Spring Boot 项目:

复制代码
cd ~/Desktop/liangchen/code/ai-growth-academy-backend

指定 JDK 21:

复制代码
jenv local 21

此时项目目录会生成:

复制代码
.java-version

以后进入这个项目目录,jenv 会自动使用 JDK 21。

另一个项目需要 JDK 8:

复制代码
cd ~/Desktop/old-project
jenv local 1.8

这样两个项目可以分别使用不同版本,不需要手动切换。


七、常用命令

复制代码
# 查看本机所有 JDK
/usr/libexec/java_home -V

# 查看 jenv 中的 JDK
jenv versions

# 查看当前版本
jenv version

# 全局使用 JDK 21
jenv global 21

# 全局使用 JDK 17
jenv global 17

# 全局使用 JDK 8
jenv global 1.8

# 当前项目使用 JDK 21
jenv local 21

# 查看 Java 实际路径
which java

# 查看 Java 版本
java -version
相关推荐
DLite3 小时前
NLang 0.9.0发布:成为可嵌入语言
开发语言·编程语言·编译技术·nlang
有同事要进步3 小时前
LeetCode 14. 最长公共前缀:纵向扫描一次讲透
开发语言·python
修船大队长3 小时前
CanNm 从休眠唤醒后重复消息报文的周期与数量分析
开发语言·php
事圆则缓3 小时前
Kotlin 变量与函数:把页面状态和行为写成清楚的契约
android·开发语言·kotlin
silvamux_3 小时前
豆包 API 调用教程:Python 接入可跑通示例
开发语言·python
希洛兔4 小时前
里氏替换原则详解:子类必须能透明替换基类(含继承风险演示 + 正确重构 + JDK 案例)
java·里氏替换原则
wdfk_prog4 小时前
LWIP教程 15:IPv4 与 IPv6——从网络层工作原理到嵌入式工程取舍
运维·开发语言·网络·笔记·学习·智能路由器·ip
棉猴4 小时前
玩游戏学Python10-算术运算符应用2
开发语言·python·玩游戏·游戏编程
tachibana24 小时前
Go 语言的 Map 是否是并发安全的?
开发语言·数据结构·后端·golang·go·语言
william_yangshun4 小时前
DigUp 实测:用多模态嵌入做 macOS 全盘语义搜索
macos·向量检索