jenv
是跨平台的 java 版本管理工具。当然,pyenv 仿的 rbenv,jenv 也是仿的 rbenv,功能和用法也很类似。
$ brew install jenv
添加 path
$ echo ‘export PATH=“
H
O
M
E
/
.
j
e
n
v
/
b
i
n
:
HOME/.jenv/bin:
HOME/.jenv/bin:PATH”’ >> ~/.zshrc
$ echo ‘eval “$(jenv init -)”’ >> ~/.zshrc
安装成功,添加 java 版本(需自行下载安装)
$ brew tap caskroom/versions
$ brew cask install java7
$ brew cask install java8
需要注意的是,这里仅仅安装了 java 的 pkg 文件,你还需要进入对应的目录,执行这个 pkg 文件来完成安装。
$ cd /usr/local/Caskroom/java7/1.7.xxx
$ open xxx.pkg
将安装好的 java 添加到 jenv,注意路径和版本可能稍有不同
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/
安装好后,大部分的使用方法都和 rbenv/pyenv 类似,无非就是 /versions/local/global 等,当然还有一些特殊的配置,比如 java 的 options:
使用 1.7 版本
$ jenv local 1.7
设置编译参数选项
$ jenv local-options “-Xmx512m”
查看 所使用的 java 的信息
$ jenv info java
查看版本是否更改成功:
$ java -version
java version “1.8.0_66”
Java™ SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot™ 64-Bit Server VM (build 25.66-b17, mixed mode)
$ jenv local 1.7
$ jenv info java
Jenv will exec : /Users/xxx/.jenv/versions/1.7/bin/java
Exported variables :
JAVA_HOME=/Users/xxx/.jenv/versions/1.7
$ java -version
java version “1.7.0_80”
Java™ SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot™ 64-Bit Server VM (build 24.80-b11, mixed mode)
$ jenv which java
/Users/xxx/.jenv/versions/1.7/bin/java
$ jenv enable-plugin maven
jenv: no such command `enable-plugin’
我们发现虽然 jenv 的 version对了,但是 java -version 的结果还是不对,而且尝试开启 maven 插件也出错。执行jenv doctor
查看原因:
$ jenv doctor
[OK]
No JAVA_HOME set
[ERROR]
Java binary in path is not in the jenv shims.
[ERROR]
Please check your path, or try using /path/to/java/home is not a valid path to java installation.
PATH : …
[ERROR]
Jenv is not loaded in your zsh
[ERROR]
To fix :
cat eval “$(jenv init -)” >> /Users/xxx/.zshrc
原来是因为终端开了多个标签页,在另一个标签页编辑完 .zshrc 文件后直接到这个标签页执行了,应该先 source 一下:source ~/.zshrc
。
$ jenv enable-plugin maven
maven plugin activated
$ jenv disable-plugin maven
maven disabled
成功开启。需要注意,插件的支持是全局的,和 local/shell 无关,只需要开启一次就行了。jenv 的所有插件可以查看列表