jEnvで複数のJava SDKを使い分ける
素性のよくわからぬJavaの案件を引き継ぐことになり、その案件はJava7を必要としていました。もう1つ別の案件がJava8であることもあり、2つのバージョンのJDKを共存させる必要に迫られました。
IDEとしてEclipseを使っているので、普通にJava7 SDKをインストーラーからインストールして、Eclipse側でプロジェクトのJREを新たにインストールしたJava7にしてあげればそれで終わりなのですが、Javaにはpyenvやnodebrewみたいにバージョンを切り替える方法はないのかと探してみたところ、jEnvというものを見つけました。
jEnv自体はMacの場合、Homebrewでインストールできます。残念ながらWindowsには対応していないようです。
$ brew install jenv
次にjEnvへのPathを通します。自分は.bashrcに以下を追記しました。
if which jenv > /dev/null; then export PATH="$HOME/.jenv/bin:$PATH" eval "$(jenv init -)" fi
次にjEnvに管理するJDKを追加します。
jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
「jenv versions」とコマンドを打つことで、現在利用できる(切り替えられる)Javaのバージョンがリストアップできます。
YHNP025:~ xxxxxx$ jenv versions system 1.7 1.7.0.80 1.8 1.8.0.102 oracle64-1.7.0.80 * oracle64-1.8.0.102 (set by /Users/xxxxxx/.jenv/version) YHNP025:~ xxxxxx$ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
今はシステム全体のJavaのバージョンがJava8になっています。これをJava7に変更したい場合は以下 「jenv global (Javaバージョン)」コマンドで可能です。
YHNP025:~ xxxxxx$ jenv global oracle64-1.7.0.80 YHNP025:~ xxxxxx$ java -version java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
システム全体のJavaバージョンがJava7に変わりました。さらにjEnvでは特定ディレクトリ以下のJavaのバージョンのみを変更することが可能です。任意のJavaバージョンを使いたいディレクトリ直下で「jenv local (Javaバージョン)」コマンドにより可能となります。
YHNP025:~ xxxxxx$ mkdir jEnvTest YHNP025:~ xxxxxx$ cd jEnvTest YHNP025:jEnvTest xxxxxx$ pwd /Users/xxxxxx/jEnvTest YHNP025:jEnvTest xxxxxx$ java -version java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) YHNP025:jEnvTest xxxxxx$ jenv local oracle64-1.8.0.102 YHNP025:jEnvTest xxxxxx$ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
上記一連の流れで、jEnvTestディレクトリ内でのJavaバージョンがJava7からJava8に変わっています。
jEnvTestディレクトリから出て、再度Javaのバージョンを調べてみましょう。
YHNP025:jEnvTest xxxxxx$ cd ../ YHNP025:~ xxxxxx$ pwd /Users/xxxxxx YHNP025:~ xxxxxx$ java -version java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
システムグローバルで設定したJava7になっています。