【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
相关推荐
小羊没烦恼!18 小时前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里18 小时前
java中的继承和多态的区别
java
小羊没烦恼!18 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕19 小时前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码19 小时前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖19 小时前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时19 小时前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读19 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang20 小时前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车20 小时前
C/C++ 为什么需要编译器?
开发语言·c++