jenv 是 mac 上管理多 jdk 版本最稳妥方案,通过 shell shim 拦截 java/javac/mvn 命令,确保 path 与 java_home 同步;需先 brew install jenv、配置 ~/.zshrc、手动 add 各 jdk 的 contents/home 路径、执行 jenv rehash,并支持 global/shell/local 三级切换。

Mac 上管理多个 JDK 版本,用 jenv 是最稳妥、最常用的方式。它不只是改 JAVA_HOME,而是通过 shell shim 拦截 java、javac、mvn 等命令,确保 PATH 和环境变量同步生效,避免 alias 方案里“JAVA_HOME 变了但 java 还是旧版本”的经典坑。
安装 jenv 并初始化 shell 环境
jenv 本身不装 JDK,只做调度。先确保已安装 Homebrew(没装请先执行 brew --version 验证):
- 运行
brew install jenv - 将以下两行追加到
~/.zshrc(M 系列 Mac 默认 shell):export PATH="$HOME/.jenv/bin:$PATH"eval "$(jenv init -)" - 执行
source ~/.zshrc生效
(若提示env has been updated,说明 jenv 插件链已刷新,属正常) - 验证:运行
jenv --version,应输出类似0.5.4
添加已安装的 JDK 到 jenv 管理列表
jenv 不自动扫描 JDK,必须手动注册每个版本的 Contents/Home 路径。先查路径:
- 运行
/usr/libexec/java_home -V,列出所有已装 JDK 及其完整路径 - 常见路径示例(Apple Silicon):
• Temurin@8 →/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
• OpenJDK@17 →/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home
• OpenJDK@21 →/Library/Java/JavaVirtualMachines/openjdk-21.jdk/Contents/Home - 逐个添加:
jenv add /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Homejenv add /Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Homejenv add /Library/Java/JavaVirtualMachines/openjdk-21.jdk/Contents/Home - 确认成功:
jenv versions应显示带星号的可用版本,如* 1.8、17.0、21
三种粒度的 JDK 切换方式
jenv 支持全局、会话级、项目级切换,优先级从高到低:local > shell > global。
-
全局默认版本(影响所有新终端):
jenv global 17.0→ 所有未指定局部版本的终端都用 JDK 17jenv global --unset→ 恢复为系统默认(system) -
当前终端临时切换(退出即失效):
jenv shell 1.8→ 当前窗口立即切到 JDK 8,适合快速验证 -
项目目录绑定版本(进入目录自动生效):
进入项目根目录,运行jenv local 21→ jenv 自动生成.java-version文件,下次 cd 进来自动加载 JDK 21
关键收尾动作:jenv rehash
每次新增 JDK 或切换版本后,必须运行:
jenv rehash- 作用:重建
~/.jenv/shims/下的java、javac等命令垫片,否则会报command not found: java或仍调用旧版本 - 建议养成习惯:装完 JDK 或
jenv add后,立刻jenv rehash
整个流程不复杂,但漏掉 jenv rehash 或路径写错 Contents/Home 是最常见的失败原因。只要路径对、rehash 做了、shell 配置 reload 了,切换就稳了。











