我的Mac上已经有一个JDK8的版本了,这不JDK13刚发布(2019-09-17),想快速的尝一尝鲜,就得安装多个版本的JDK了。这个对Node、Ruby、Python的使用者来说,已经不是个什么新鲜话题了,但是对于Java的使用者来说,似乎没有那么多的人受到过多版本的折磨(我是通过GitHub上nvm
、rbenv
、pyenv
、jenv
的Star数量臆测出这个结论的 :P)。
- nvm
- rbenv
- pyenv
- jenv
安装JDK 13
通过Homebrew 安装JDK 13,可以先通过brew cask info java
查看目前Java的版本:
1 | java: 13,33:5b8a42f3905b406298b72d750b6919f6 |
这里显示的是JDK13,正好是我想要安装的JDK版本,如果不是你想要的版本可以自己搜索相应的 Homebrew Tap。接下来直接安装:
1 | $ brew cask install java |
这就说明JDK13已经安装好了。
但是另一个问题来了,我电脑上原来安装的JDK8去哪呢?我如何在不同的版本中随意切换呢?比如像Node的nvm
,Ruby的rvm
,Python的pyenv
等。答案是我们可以通过jenv
来实现相同的效果。
安装 jEnv
- 安装 jEnv
1 | $ brew install jenv |
安装完成之后,然后检查是否安装成功。
1 | $ jenv doctor |
在这里如果按照提示执行cat eval "$(jenv init -)" >> /Users/xxx/.zshrc
:可能会得到如下错误:
1 | cat eval "$(jenv init -)" >> /Users/xxx/.zshrc |
经过一番搜索,得到如下的解决办法,主要就是将cat
替换为echo
,这里我已经给jEnv提了个PR,以消除这个干扰。
Bash用户
1
2
3$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -lZsh用户
1
2
3$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ exec $SHELL -l
然后再次执行jenv doctor
,得到如下信息:
1 | [OK] No JAVA_HOME set |
为了能够正确的设置JAVA_HOME
,最好开启export
插件:
1 | $ jenv enable-plugin export |
如果你是Maven用户,建议开启Maven插件,使得Maven能够使用正确的JDK版本:
1 | jenv enable-plugin maven |
管理不同版本的JDK
添加JDK
添加最新安装的JDK:
1 | $ jenv add $(/usr/libexec/java_home) |
如果/usr/libexec/java_home
所指的位置不是你想要的,也可以手动指定目录:
1 | $ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/ |
查看JDK版本
执行jenv versions
:
1 | system |
默认情况下,system指的是系统中安装的最新版本的JDK。
切换JDK版本
Global
设置全局模式下的JDK版本:1
2
3$ jenv global 13
$ exec $SHELL -l
$ java -versionLocal
在某个工作目录下设置JDK版本,会在当前目录下创建一个.java-version
的文件:1
2
3$ jenv local 1.8
$ exec $SHELL -l
$ java -versionShell
设置当前Shell session中的JDK版本:1
2$ jenv shell 1.8
$ java -version