前言

虽然大量的讨论可能让你认为,Java 开发者都已经在日常中使用 Docker 了(如果是这样的话)。但是,他们同样会有很高的概率使用不同的 Java 版本,这里有几个原因:

  1. 检测同一个应用的版本兼容性(比如 7 和 8 版本)
  2. 检测不同组织的 Java 对应用的兼容性(比如 OpenJDK 与 Oracle)
  3. 由于处在开发中(或者维护中)的不同应用使用不同的的 Java 版本
  4. 你想尝试新版本的 JDK 但是当前工作只能用到 1.7

为了适应这种需求,最简单的方法便是设置 JAVA_HOME 这个环境变量,来使用不同的 Java 环境(如果必要的话):

1
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home

这的确能使用。但是,你必须得记住每个不同 Java 环境的具体地址,以便你切换。关键是你每次打开控制台都要执行一次这个命令。在 Java 版本更新如此快的情况下,Java 版本的数量相比前几年增加了很多。

其实,其他语言也遇到了这个问题。他们之一便是 Ruby。为了解决这个问题,可以使用一个工具叫 rbenv。如果 Java 要是有这么一个工具,那岂不是很 nice?的确,有这么一个工具能实现这个功能。

如果你想在一台机器上使用多个 Java 版本,jenv 绝对是你所需要的那个工具。

安装

1
brew installl jenv

\ 你同样可以通过 git clone 来安装。那样的话,你同样需要通过手动的方式来修改你的 PATH 指向你 clone 下来的可执行文件*

注册 JDK

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

他的输出可能像这样:

1
2
3
oracle64-9.0.4 added
9.0.4 added
9.0 added

这是你唯一的需要记住 Java 路径的地方!

列出可用的 JDK

1
jenv versions

他的输出会是像下面这样的(取决于你当前系统上已经注册的 JDK 数量及版本)

1
2
3
4
5
6
7
* system
1.8
1.8.0.92 (set by /usr/local/var/jenv/version)
9.0
9.0.4
oracle64-1.8.0.92
oracle64-9.0.4

\ * 标志便是指出你当前目录正在使用的版本*

选择默认 JDK

1
jenv global 1.8

设定当前目录所使用的 JDK

1
jenv local 9.0

当然,这点还是不够的。这种简单的 JDK 管理离开工具的支持也没什么用,比如 Maven。jenv 提供了插件,能让它与多数的工具协同使用。比如,强制让 mvn 使用 jenv 所定义的 JDK:

1
jenv enable-plugin maven

插件适用于 AntGroovySpring Boot 甚至 SBT 等等!

总结

如果你需要经常在不同 Java 版本之间切换,jenv 不说是一个节省生命,但至少也是一个节省时间的选择。