活到老学到老之使用jenv管理多个java版本
我本地安装的java版本是1.8
testmanzhang@TestMandeMacBook-Pro ~ % /usr/libexec/java_home -v 1.8
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
这个版本不是通过 JDK 安装的,是 Java Applet Plugin(浏览器用的 Java 运行环境),并不是完整的 JDK。
删除当前版本
testmanzhang@TestMandeMacBook-Pro ~ % sudo rm -rf "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin"
testmanzhang@TestMandeMacBook-Pro ~ % sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_401.jdk
检查是否删除成功
java -version
javac -version
/usr/libexec/java_home -V
安装java 8(Temurin 版)
brew install --cask temurin@8
安装完成后检查
/usr/libexec/java_home -V
安装 Java 21
brew install openjdk@21
安装完成后执行/usr/libexec/java_home -V,但只有1.8的信息:
==> Pouring openjdk@21--21.0.8.sonoma.bottle.tar.gz
==> Caveats
For the system Java wrappers to find this JDK, symlink it withsudo ln -sfn /usr/local/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdkopenjdk@21 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.If you need to have openjdk@21 first in your PATH, run:echo 'export PATH="/usr/local/opt/openjdk@21/bin:$PATH"' >> ~/.zshrcFor compilers to find openjdk@21 you may need to set:export CPPFLAGS="-I/usr/local/opt/openjdk@21/include"
==> Summary
🍺 /usr/local/Cellar/openjdk@21/21.0.8: 600 files, 330.4MB
==> Running `brew cleanup openjdk@21`...
Disable this behaviour by setting `HOMEBREW_NO_INSTALL_CLEANUP=1`.
Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`).
==> No outdated dependents to upgrade!
==> Caveats
==> openjdk@21
For the system Java wrappers to find this JDK, symlink it withsudo ln -sfn /usr/local/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdkopenjdk@21 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.If you need to have openjdk@21 first in your PATH, run:echo 'export PATH="/usr/local/opt/openjdk@21/bin:$PATH"' >> ~/.zshrcFor compilers to find openjdk@21 you may need to set:export CPPFLAGS="-I/usr/local/opt/openjdk@21/include"
testmanzhang@TestMandeMacBook-Pro ~ % nano ~/.zshrc
testmanzhang@TestMandeMacBook-Pro ~ %
testmanzhang@TestMandeMacBook-Pro ~ %
testmanzhang@TestMandeMacBook-Pro ~ %
testmanzhang@TestMandeMacBook-Pro ~ %
testmanzhang@TestMandeMacBook-Pro ~ %
testmanzhang@TestMandeMacBook-Pro ~ % /usr/libexec/java_home -V
Matching Java Virtual Machines (1):1.8.0_462 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 8" /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
testmanzhang@TestMandeMacBook-Pro ~ %
按照提示执行:
sudo ln -sfn /usr/local/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-21.jdk
使用jenv管理java版本的话不用执行:
echo 'export PATH="/usr/local/opt/openjdk@21/bin:$PATH"' >> ~/.zshrc
编辑~/.zshrc,在文件顶部添加:
export PATH="$HOME/.jenv/shims:$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
同时注释掉原有的java环境变量:
#JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home"
#PATH=$JAVA_HOME/bin:$PATH:.
#CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
#export JAVA_HOME
#export PATH
#export CLASSPATH
保存后,执行:
source ~/.zshrc
之后这步很关键,就是要重启终端:
testmanzhang@TestMandeMBP ~ % which java
/Users/testmanzhang/.jenv/shims/java
不然:
testmanzhang@TestMandeMBP ~ % which java
/usr/bin/java
which java 指向了 ~/.jenv/shims/java,说明 jenv 正常工作
之后添加java版本
jenv add /usr/local/Cellar/openjdk@21/21.0.8/libexec/openjdk.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
之后rehash
testmanzhang@TestMandeMBP ~ % jenv rehash
jenv命令
testmanzhang@TestMandeMBP ~ % jenv doctor
[OK] No JAVA_HOME set
[OK] Java binaries in path are jenv shims
[OK] Jenv is correctly loaded
testmanzhang@TestMandeMBP ~ % jenv versions* system (set by /Users/testmanzhang/.jenv/version)1.81.8.0.4622121.021.0.8openjdk64-21.0.8temurin64-1.8.0.462
testmanzhang@TestMandeMBP ~ %
使用jenv global 切换不同的版本
testmanzhang@TestMandeMBP ~ % jenv global 21.0.8
testmanzhang@TestMandeMBP ~ % jenv rehash
testmanzhang@TestMandeMBP ~ % java -version
openjdk version "21.0.8" 2025-07-15
OpenJDK Runtime Environment Homebrew (build 21.0.8)
OpenJDK 64-Bit Server VM Homebrew (build 21.0.8, mixed mode, sharing)