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