在 macOS 中使用 jEnv 管理多个 Java 版本

在使用 Java 开发时候,经常会接触到不同的版本。比如我大部分的时间使用的都是 Java 8,而有时又想看看 Java 7 的源代码,现在 Java 9、10 都出来了,又想试试新特性。一般情况下都是是配置 JAVA_HOME,以指定特定的Java 版本,但是这都需要手动输入。每次都要这么重新设置,实在是太痛苦了。终于,我发现了 jEnv - Manage your Java environment

正如它的官网所宣称的那样,它是来让你忘记怎么配置 JAVA_HOME 环境变量的神队友。使用简单的命令就可以在不同的 Java 版本之间进行切换。

基本使用

在 macOS 下使用 Homebrew 安装 jEnv

1
$ brew install jenv

安装后进行简单的配置,以使 jEnv 生效
使用 bash 的情况

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

使用 zsh 的情况

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

好了,jEnv 已经安装好了,让我们来看一下它找见哪个 Java 版本了

1
2
$ jenv versions
* system (set by /Users/yibo/.jenv/version)

它只找到了系统默认的 Java,即使我已经下载了其他版本的 Java。*表示当前选择的版本。

和 rbenv 不同的是,jEnv 不能自己安装任何版本的 Java,所以需要我们手动安装好之后再用 jEnv 指向它们。

Java 7、8、9 都可以从 Oracle Java Archive 下载到。安装 Java 6,需要在 Apple 进行下载。它们都将安装到/System/Library/Java/JavaVirtualMachines/下。

使用jenv add将 Java 8 加入 jEnv 中

1
2
3
4
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/
oracle64-1.8.0.151 added
1.8.0.151 added
1.8 added

运行jenv versions时会显示

1
2
3
4
5
$ jenv versions
* system (set by /Users/yibo/.jenv/version)
1.8
1.8.0.151
oracle64-1.8.0.151

同样将 Java 7 也加入其中

1
2
3
4
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
oracle64-1.7.0.80 added
1.7.0.80 added
1.7 added

现在运行jenv versions会显示

1
2
3
4
5
6
7
8
$ jenv versions
* system (set by /Users/yibo/.jenv/version)
1.7
1.7.0.80
1.8
1.8.0.151
oracle64-1.7.0.80
oracle64-1.8.0.151

对于博主这种不是处女座的人来说,也觉得需要对版本再管理一下,使用jenv remove可以从 jEnv 中去掉不需要的 Java 版本

1
2
$ jenv remove 1.7
JDK 1.7 removed

整理后,再运行jenv versions会显示

1
2
3
4
$ jenv versions
* system (set by /Users/yibo/.jenv/version)
1.7.0.80
1.8.0.151

选择一个 Java 版本,运行jenv local,例如

1
2
3
4
5
6
7
8
9
10
$ jenv local 1.8.0.151
$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
$ jenv local 1.7.0.80
$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

DangDangDangDang,我们已经成功地指定了某文件夹中 local 的 Java 版本。(注意:记得取消自己手动设置的JAVA_HOME

你可以运行jenv global设置一个默认的 Java 版本,运行jenv which java显示可执行的 Java 的完整路径。

你也可以在特定的文件夹下使用. java-version 文件来设定 Java 的版本。当我需要在 Project 中使用 Java 6 时,我仅仅需要把1.6.0.65作为内容保存在. java-version 文件中,当我进入该文件夹时 jEnv 会自动地帮助我设定 local 的 Java 的版本。

没错,我们现在有了 Java 的多个版本,并且可以在它们之间轻松切换。更多的使用方法可以在 jEnv 官网的官网查询到。

参考文献

jEnv 官网
Managing multiple versions of Java on OS X