前言
目前在开发过程中,需要同时安装 Jdk8, Jdk11, Jdk17 进行项目开发,为了统一管理Jdk 环境,需要一款类似 conda 的工具来管理多套 Jdk 环境,可选的方案有以下几种:
- 使用 shell 脚本来动态设置 JAVA_HOME;
- 使用 scoop 来管理环境;
- 使用 jenv 来管理环境;
经过使用体验,最后选择了 jenv 来做 jdk 版本管理。
安装
在 mac 下面可以使用 brew 来安装 jenv
| 1 | brew install jenv | 
我用的 zsh,因此还需要将 jenv 添加到 zsh 中
| 1 | echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc | 
配置
1.添加在本地已经安装的 jdk
| 1 | jenv add /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/ | 
2.列出已经添加的 jdk 版本
| 1 | jenv versions | 

3.设置 jdk 的三种方式
- jenv local - :该命令将会在当前目录下设置特定的 Java 版本。这意味着只有在该目录下执行程序调用时才会使用该版本的 Java。 
- jenv global - :该命令将会设置系统全局的 Java 版本。当在终端或其它地方运行 Java 应用程序时,都将使用该版本的 Java。 
- jenv shell - :该命令将会在当前 Shell 会话中设置特定的 Java 版本。这意味着只有在该 Shell 会话中执行程序调用时才会使用该版本的 Java。 - 因此,这三个命令的主要区别在于设置 Java 版本的作用域和范围。jenv local 的作用域仅限于当前工作目录,jenv global 的作用域与操作系统全局环境相关,而 jenv shell 的作用域仅限于当前 Shell 会话。因此,根据具体情况选择使用不同的命令。需要注意的是,jenv 只对使用 jenv exec 执行的命令生效,对于直接使用 java 命令执行的程序,jenv 并不会自动切换 Java 版本。因此,需要手动设置系统环境变量或使用别的工具来切换 Java 版本。 
4.Jenv 诊断
jenv doctor 是 jenv 命令行工具提供的一个诊断工具,用于检查本地系统的 Java 环境是否正确配置。当我们安装 jenv 后,需要将其配置到系统环境变量中,并安装所需的 Java 版本。使用 jenv doctor 命令可以检测配置和 Java 版本是否正确安装,并提供诊断信息和建议以解决检测出的问题。jenv doctor 常见的使用场景有:
- 检查 jenv 的环境变量是否正确配置。jenv 是一款基于环境变量来管理多个 Java 版本的工具,因此我们需要将其配置到系统环境变量中,并确保环境变量的正确性。
- 检查 jenv 的安装路径和版本号。检查 jenv 实际安装的位置以及当前所用的版本号,是否符合预期要求。
- 检查可用的 Java 版本是否正确安装和配置。jenv doctor 会检查本地系统环境中已经安装的 Java 版本,是否安装在了 jenv 管理的目录中,并支持在 jenv 中进行切换。

