Chinese Introduction

Jacky Chan edited this page Jun 19, 2013 · 10 revisions

jenv: Java enVironment Manager,管理Java的开发环境。 当你从github clone出代码后,发现build.xml, pom.xml和build.gradle等文件,你突然发现Ant,Maven和Gradle还米有安装,太悲催啦。 你发现一个gist非常不错,想要运行一下,突然发现gist是Groovy代码,靠,还没有安装Groovy。开发完成后,应用要做jdk 1.5的兼容,突然发现1.5的环境还没有。所有这些和环境相关的问题就是jenv要解决的问题,而且以一种非常简单的方式。

为何要选择jenv?

建立一个Java的开发环境不容易,你首先要安装Jdk,接下来你要下载各种工具,如ant,maven等,接下来是各种web server,你需要浪费很多的时间在下载安装。安装的过程也非常繁复,你需要设置各种XXX_HOME,修改PATH变量等。过一段时间后,遇到工具升级,你又要重新修改XXX_HOME,调整PATH变量,又会浪费你不少时间。选择jenv后,你会拥有:

  • 安装和维护JDK的版本非常容易,不管是6,7还是8
  • 安装工具很容易,Ant、Maven、Tomcat非常简单,一个指令完成,没有XXX_HOME设置,不需要调整PATH
  • 维护版本很容易,只需要安装新版本,然后卸载老版本就可以啦,其他没有工作
  • 目录是标准和规范的,所有的candidate都安装在.jenv/candidates目录下,并且安装candidate/version进行目录划分,这对IDE也非常友好,在IDE中可以直接扫描出指定版本的jdk、tomcat、maven等等。
  • 内部仓库支持:jenv提供一套标准的仓库管理软件,你可以在公司内部搭建一个软件仓库用于管理内部的软件和工具,这点和Maven Nexus非常类似。如内部的Tomcat版本,是经过调整的,已经包含数据源、mail session等,安装该版本的Tomcat或相关工具会非常容易。
  • 整洁:.bash_profile中没有那么多设置,PATH也没有那么长,你不用再做繁琐低级的工作。

jenv基本介绍:

jenv命令主要包含三个部分: command, candidate 和 version。command为命令,如install ,list等,表示要执行某一操作; candidate就是应征者的名称,如java,ant等,表示可以被安装的开发包或者工具,是命令的操作对象;version是应征者的版本,如3.0.5, 2.2.1等,某些指令需要用到版本,如安装,设置为默认等。 所有的命令可以通过 jenv help获取。 所有的应征者的信息通过 jenv candidates获取,某一candidate的版本列表通过 jenv list canidate_name 来获取。

jenv安装和更新

jenv的安装非常简单,你只需要打开你喜欢的控制台(xterm,iTerm等),然后输入 curl -s get.jenv.io | bash 就可以完成安装,然后你重新打开控制台或一个控制台tab或者在控制台输入 source $HOME/.jenv/bin/jenv-init.sh 即可。升级也非常简单,只需要执行 jenv selfupdate,然后重新打开terminal即可。由于jenv采用离线方式存储相关的数据,所以建议你每1-2天使用jenv repo update进行软件版本信息更新。 jenv支持bash completion,你只要在.bash_profile中添加source "$HOME/.jenv/commands/completion.sh"即可,接下来使用TAB完成command, candidate和version的自动提示。

jenv的基本操作

jenv安装完毕后,接下来我们就需要安装Java开发环境,首先我们要了解jenv支持哪些候选者,输入 jenv candidates 就可以看到candidate列表。 接下来我们输入 jenv list java 查看可用的java版本,jenv会根据你当前操作系统情况下载对应的版本,主要是OS和32位64位的区别。执行 jenv install java 1.7.0_13 安装指定版本的Java,安装完毕后执行java --version或者echo $JAVA_HOME进行查看。

前面已经介绍啦 jenv all 是显示所有应征者列表, jenv list candidate_name 是显示某一candidate的版本列表, jenv install candidate_name version 是安装某一版本的candidate。接下来还有一个就是jenv use和jenv default。由于一个candidate有多个版本,如果我们想做版本切换,那么就使用jenv use candidate_name version,这样就可以切换到candidate的指定版本上。如果我们想设置某一版本作为candidate的默认版本,这样在系统启动后就可以直接使用默认的candidate,如对应的XXX_HOME和PATH的调整。通过 jenv default candidate_name version 就可以设置candidate的默认版本。你可以通过 jenv current candidate_name 来查看默认版本的信息。 如果你想卸载candidate的某一版本,通过 jenv uninstall canidate_name version即可完成。

下面是jenv的常见命令介绍:

  • ndidate的安装目录。 有的时候我们需要修改软件的相关配置,我们需要进入安装目录,使用 jenv cd candidate_name [version] 即可。 如果省略version则会进入默认版本的安装目录。
  • install: 安装某一版本的软件,如 jenv install maven 3.0.5
  • uninstall: 卸载某一版本的软件,如 jenv uninstall maven 3.0.4
  • reinstall: 重新安装某一版本的软件,主要用于内部的软件更新,如某一项目定制的Tomcat, 如 jenv reinstall tomcat 7.0-uic
  • use: 使用软件的某一版本,如 jenv use maven 3.0.4
  • which: 列出当前使用到的软件版本,如 jenv which maven
  • pause: 暂停某一软件的使用,主要用于软件版本的冲突
  • exe: 执行某一软件下的脚本,主要用于脚本名称冲突时。如TomEE和Tomcat都包含startup.sh,这个时候执行 "jenv execute tomcat startup.sh" or "jenv execute tomee startup.sh"
  • default: 设置某一软件的版本为缺省, 如 jenv default maven 3.0.5
  • cd: 更改当前目录进入到软件的安装目录,如 jenv cd groovy
  • show: 显示软件的详细信息
  • requirements: 显示jenv对环境的要求

jenv集成了哪些candidate

jenv主要集成了很多的开源软件,如Ant, Maven, Groovy等,关于集成的软件列表,可以通过 jenv all 或者访问 http://jenv.io/candidates 查看。

jenv和git的集成

有些时候我们的candidate是保存在git仓库中的,我们通过版本控制来控制candidate更新,这个时候我们可以通过install命令安装这些candidate。由于这些candidate还没有被中央仓库创建,所以我们需要在 ~/.jenv/db下创建一个candidates_local的文件,然后添加candidate名称。接下来我们就可以通过以下命令安装基于git的candidate:

$jenv install candidate_name version git@github.com:linux-china/groovy_scripts.git

以后更新也很简单,执行:

$jenv update candidate_name

IntelliJ IDEA集成

jenv的命名和目录是标准的。应征者名称都是产品的名称,版本也是对应的。所有的candidate都安装在.jenv/candidates目录下,并且以candidate_name/version这个目录进行组织。有了标准后,就会被其他工具所识别。 jenv IntelliJ Plugin会自动扫描jenv安装目录,自动发现可用的Java版本、各种Web Server等,自动为Groovy Plugin,Scala Plugin等设置对应语言的安装目录,在IDEA中几乎不需要进行任何设置就会完成所有相关的依赖设置。 关于插件的详情请访问 http://plugins.jetbrains.com/plugin/7229?pr=idea