【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
相关推荐
huaweichenai1 小时前
使用maven搭建sprint-boot
java·maven·sprint
zerozrc01 小时前
Java 方法调用的底层原理
java·后端
星火10241 小时前
【LangChain4j系列01】LangChain4j 快速入门与核心概念
java·人工智能
SemiTris1 小时前
从Controller到Tomcat底层请求链路全解析
java·tomcat
特立独行的猫a1 小时前
我用 Rust + Tauri 2 复刻了 N_m3u8DL-CLI:一个 m3u8 多线程下载器
开发语言·后端·rust·m3u8·视频下载器·m3u8dl-cli
月光有害1 小时前
理解 Spring 依赖注入:从构造器注入到集合与条件 Bean
java·后端·spring
程序员雷欧1 小时前
LongAdder
开发语言·python
码农进化录1 小时前
Java 程序员的 AI 进化论 | 用 AI 生成 Spring Boot 脚手架,省下两小时重复劳动
java·spring boot·openai
鱼子星_1 小时前
【C++】反向迭代器:反向迭代器的底层认识与模拟实现
开发语言·c++·笔记·stl
名字还没想好☜1 小时前
Java 用 MethodHandle 替代反射:调用性能实测、invokeExact 的坑与缓存
java·开发语言·缓存·反射·methodhandle