jenv使ってJDKのバージョン管理

  • 64
    いいね
  • 0
    コメント

最近はJava8の記事がよくでてきてますよね。

私も「まずはためしに使ってみよう!」って始めようとした時、

  • あれ、今入っているJava7はどうなるんだろ?
  • Java8入れるとシステムデフォもJava8になるのかも
  • シンボリックリンクとかゴニョゴニョとか?うーん、めんどうそう...

となりました。

ただ、GVMとかpyenvとかすでに使ってたので、もしかしてJavaにもxxenvがあるのかも?
と探したらありました。

jEnv - http://www.jenv.be/

これを使うと、システムのデフォルトはJava7、このプロジェクトフォルダはJava8とか
できて、JAVA_HOMEやらシンボリックリンクやら頑張らなくてもよくなります。

インストール

http://www.jenv.be/ にとても簡単にまとまってます。
私はOSX使っているので、Homebrewでいれました。

$ brew install jenv

その後、jenvへのパスを通すようにします。
.bashrcとか.bash_profileらへんに以下のような追記を。

if which jenv > /dev/null; then
  # JENV_ROOTがemptyの場合、'${HOME}/.jenv'がrootと設定される
  export JENV_ROOT=/usr/local/var/jenv
  eval "$(jenv init -)"
fi

で、source ~/.bashrcして反映

次にjenvへ管理したいJDKを登録します。
私のOSXだと、こんな感じ。面倒だったので6から8まで入れました。

$ jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

jenv versionsと叩くと、管理対象になったバージョンがリストアップされます
リストアップ内容はインストール環境によって異なるかも。

$ jenv versions
  system
  1.6
  1.6.0.65
  1.7
  1.7.0.60
  1.8
  1.8.0.25
  oracle64-1.6.0.65
* oracle64-1.7.0.60 (set by /usr/local/opt/jenv/version)
  oracle64-1.8.0.25

使い方の例

システムデフォルトはjava7にして、特定のフォルダのみjava8使う

システムデフォルトをJava7に

jenv global {version} でシステムデフォルトのJDKを設定

$ jenv global oracle64-1.7.0.60
$ java -version
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

java8-hogeフォルダはJava8に

jenv local {version}で指定ディレクトリでのJDKを設定

$ mkdir java8-hoge && cd java8-hoge
$ jenv local oracle64-1.8.0.25
$ java -version
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

java8-hogeのディレクトリをみると、.java-versionファイルができてます。

$ ls -la
total 8
drwxr-xr-x  3 jyotti  staff  102  4  5 18:14 .
drwxr-xr-x  4 jyotti  staff  136  4  4 20:33 ..
-rw-r--r--  1 jyotti  staff   18  4  5 18:15 .java-version
$ cat .java-version
oracle64-1.8.0.25

javaコマンドはどうなってんの?

$ type java
java はハッシュされています (/usr/local/opt/jenv/shims/java)

pyenvとかと一緒ですね。

参考ページ