Java刚出了Java9,Java10也在日程上了。然而Java的相关环境实在是太多,对于某些增强型的组件,是依赖某个特定版本的Java进行工作的,当手头的项目多,不得不对不同版本的Java进行开发的时候,就必须来回不停切换版本,实在是不方便。其实不同版本的Java目录是不同的,完全可以同时存在。通过本文介绍的工具Jenv就可以管理本机的多个Java环境,并且通过简单的配置就可以让指定项目使用特定的Java版本,无需再进行反复切换了。这个工具本身还是开源的,地址就在https://github.com/gcuisinier/jenv

  先要强调,Jenv是个脚本软件,作用环境限于shell环境内,如果是使用IDE比如eclipse,Intellij,那它体现不出它自己的价值,毕竟IDE一般都具有管理JDK的功能。安装Jenv的方式很简单,直接clone到~/.jenv中,然后把bin目录添加到系统路径中,重启shell就好啦。

  > git clone https://github.com/gcuisinier/jenv.git ~/.jenv

  > vim ~/.local/share/omf/init.fish

  > cp fish/jenv.fish ~/.config/fish/functions/

  在文件中添加set PATH $HOME/.jenv/bin $PATH。这是fish shell的安装方式,其他方式可以参考官方文档。

  装好以后通过jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home可以将安装在该目录下的Java添加到jenv中。目前的jenv在fish上有点问题,jenv默认有两个文件夹不存在,因此需要先执行mkdir ~/.jenv/versionsmkdir ~/.jenv/plugins先建立目录才能执行jenv add和jenv enable-plugins.

  Jenv有两个环境,global和local,分别对应全局jdk和文件夹内的jdk版本指定。对于我来说,一般全局使用最新的Java版本,在不能使用最新Java的文件夹内执行jenv local 1.8.0来指定比如1.8.0版本。如果使用了maven,gradle等编译管理软件,需要用jev enabel-plugin maven来重定向mvn命令,以便maven也使用指定的Java版本。其他工具,比如gradle,原理是类似的。

  有了这个工具,从此再也不怕多种版本的Java开发啦!

Update 12.19:

  对于fish来说,启动的时候需要执行jenv rehash,来确保java由jenv管理。最简单的方法在~/.config/fish/conf.d/omf.fish里增加jenv rehash即可。