在这篇指南中,我们将完成使用jEnv命令行工具来管理MacOS系统中的三个JDK版本(Java8、Java11和Java17),大致流程为:

  1. 使用MacOS的包管理工具Homebrew安装JDK环境变量管理工具jEnv
  2. 使用Homebrewan安装多个JDK版本
  3. 将多个Java版本的路径加入jEnv
  4. 通过jEnv命令设置全局、项目和shell的Java版本

所有涉及的工具清单如下:

  • Homebrew,Homebrew是一个免费的MacOS包管理工具,我们用它来安装JDK和JDK版本管理工具
  • jEnv,jEnv是一个让你不需要记住如何设置JAVA_HOME环境变量的命令行工具,我们将用它来管理系统中的JDK版本

安装步骤

安装Homebrew

在MacOS上安装Homebrew,可以参考MacOS包管理工具-Homebrew

安装jEnv

输出:

 1Running `brew update --preinstall`...
 2==> Downloading https://ghcr.io/v2/homebrew/core/jenv/manifests/0.5.4
 3######################################################################## 100.0%
 4==> Downloading https://ghcr.io/v2/homebrew/core/jenv/blobs/sha256:521a1ad6e28b90f1e37893d279950e35957a0580464d639ec74c3
 5==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:521a1ad6e28b90f1e37893d279950e35957
 6######################################################################## 100.0%
 7==> Pouring jenv--0.5.4.all.bottle.tar.gz
 8==> Caveats
 9To activate jenv, add the following to your ~/.zshrc:
10  export PATH="$HOME/.jenv/bin:$PATH"
11  eval "$(jenv init -)"
12==> Summary
13🍺  /usr/local/Cellar/jenv/0.5.4: 84 files, 73KB
14==> Running `brew cleanup jenv`...
15Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
16Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). 

按照输出提示,我们需要将以下配置加入我们的shell配置文件中(如果系统使用的shell是bash,就将其加入~/.bash_profile或者~/.bashrc;如果使用的shell是zsh,就将其加入~/.zshrc文件中)。

 1export PATH="$HOME/.jenv/bin:$PATH"
 2eval "$(jenv init -)" 

我们可以直接将上述配置直接粘贴到shell配置文件中,也可以通过echo将其加入配置文件中:

 1echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
 2echo 'eval "$(jenv init -)"' >> ~/.zshrc 

不管通过哪种方式完成配置后,我们需要使配置立即生效:

jEnv已经安装配置完成,我们可以通过jenv doctor命令验证一下:

输出:

 1[OK]    No JAVA_HOME set
 2[ERROR] Java binary in path is not in the jenv shims.
 3[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.
 4    PATH : /usr/local/Cellar/jenv/0.5.4/libexec/libexec:/Users/username/.nvm/versions/node/v17.3.0/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
 5[ERROR] Jenv is not loaded in your zsh
 6[ERROR] To fix :    echo eval "$(jenv init -)" >> /Users/username/.zshrc 

假如看到类似上面错误提示,暂且不用理会,因为我们还没将JDK添加到jEvn的管理中。如果我们在后续会使用到Maven还需要以下操作:

  • 启用export插件
 1jenv enable-plugin export 

输出

 1You may restart your session to activate jenv export plugin echo export plugin activated 
  • 启用Maven插件

输出

安装Java

 1# 安装最新版OpenJDK
 2$ brew install --cask temurin
 3
 4# 安装其他版本
 5$ brew tap homebrew/cask-versions
 6$ brew install --cask temurin11
 7$ brew install --cask temurin8 

配置jEnv

把所有JDK加入jEnv管理

首先,查看系统中有哪些JDK版本:

 1/usr/libexec/java_home -V 

输出:

 1Matching Java Virtual Machines (4):
 2    17.0.2 (x86_64) "Eclipse Temurin" - "Eclipse Temurin 17" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
 3    11.0.13 (x86_64) "Oracle Corporation" - "Java SE 11.0.13" /Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home
 4    1.8.202.08 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
 5    1.8.0_202 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home 

然后,将所有JDK的路径加入到jEnv中,语法如下:

例如:

 1jenv add /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home 

查看下jEnv管理的所有JDK版本:

输出:

 1 system
 2  1.8
 3  1.8.0.202
 4* 11 (set by /Users/username/.jenv/version)
 5  11.0
 6  11.0.13
 7  17
 8  17.0
 9  17.0.2
10  openjdk64-17.0.2
11  oracle64-1.8.0.202
12  oracle64-11.0.13 

设置全局JDK版本

设置项目JDK版本

如果要为项目指定JDK版本,只需在项目根目录下使用以下命令即可,jEnv会在目录下生成.java-version文件来描述当前项目使用的JDK版本

设置shell的JDK版本

FAQ

jEnv启用插件报错

问题信息

 1jenv: no such command `enable-plugin' 

解决方案
重启会话终端

参考资料

个人笔记记录 2021 ~ 2025