Mac使用Jenv实现Jdk多版本管理

写 bug 的大耳朵图图
·

前言

目前在开发过程中,需要同时安装 Jdk8, Jdk11, Jdk17 进行项目开发,为了统一管理Jdk 环境,需要一款类似 conda 的工具来管理多套 Jdk 环境,可选的方案有以下几种:

  1. 使用 shell 脚本来动态设置 JAVA_HOME;
  2. 使用 scoop 来管理环境;
  3. 使用 jenv 来管理环境;

经过使用体验,最后选择了 jenv 来做 jdk 版本管理。

安装

在 mac 下面可以使用 brew 来安装 jenv

brew install jenv

我用的 zsh,因此还需要将 jenv 添加到 zsh 中

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
# 执行 jenv 初始化脚本,类似于 conda init 命令
echo 'eval "$(jenv init -)"' >> ~/.zshrc

配置

1.添加在本地已经安装的 jdk

jenv add /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/

2.列出已经添加的 jdk 版本

jenv versions

image.png

3.设置 jdk 的三种方式

  1. jenv local :该命令将会在当前目录下设置特定的 Java 版本。这意味着只有在该目录下执行程序调用时才会使用该版本的 Java。

  2. jenv global :该命令将会设置系统全局的 Java 版本。当在终端或其它地方运行 Java 应用程序时,都将使用该版本的 Java。

  3. 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 常见的使用场景有:

  1. 检查 jenv 的环境变量是否正确配置。jenv 是一款基于环境变量来管理多个 Java 版本的工具,因此我们需要将其配置到系统环境变量中,并确保环境变量的正确性。
  2. 检查 jenv 的安装路径和版本号。检查 jenv 实际安装的位置以及当前所用的版本号,是否符合预期要求。
  3. 检查可用的 Java 版本是否正确安装和配置。jenv doctor 会检查本地系统环境中已经安装的 Java 版本,是否安装在了 jenv 管理的目录中,并支持在 jenv 中进行切换。 image.png

参考文档

  1. Jenv 官方文档
1
社区准则 博客 联系 社区 状态
主题