Help us understand the problem. What is going on with this article?

複数バージョンのJavaを切り替えて使用できるようにする。

OSX の環境で 複数のJavaのバージョン 例えば Java7, Java8, Java9 をそれぞれインストールし
切り替えて使用できるようにします。

前提

前提は Mac OSX 10.11 で homebrew をインストールされている環境です。

方針

方針としては 私の場合は

  • cask を使って違うバージョンのJava をインストール
  • jEnv を使ってバージョンの切り替え

という方針で設定します。

それぞれが依存関係ではないので 手動で Java をインストールして jEnv で管理することももちろん可能です。

caskroom/versions インストール

私の場合 homebrew caskroom/versions を使って複数のJavaをインストールしています。
2018-11-06 追記
2018-11-06 では既に brew cask search が disabled になっており brew search が使えます。

> brew tap caskroom/versions
> brew search java
==> Exact match
java
==> Partial matches
charles-applejava      java-beta              java9-beta
charles-beta-applejava     java6              yourkit-java-profiler
eclipse-java           java7

> brew cask install java
> brew cask install java7
> brew cask install java9-beta

上の例では java8, java7, java9-beta をcask でインストールしています。

java_home -V でシステムにインストールされている Java が表示されます。

 /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    9, x86_64:  "Java SE 9-ea"  /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_92, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
    1.8.0_25, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
    1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

この段階でも 環境変数 JAVA_HOME をみてバージョンを切り替えてくれるビルド環境であれば

> export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

というように /user/libexec/java_home -v <version> コマンドの結果を JAVA_HOME に設定することでバージョンを切り替えることは出来ます。

jEnv インストール

jEnv rbenv の java 版というとイメージしやすいのではないでしょうか

jenv web site

jEnv を使うとシステムでは 1.8 だけど 特定のディレクトリ配下の時だけは 1.7 を使うということが可能となります。

homvebrew で jenv をインストール

> brew install jenv

次に 私はzshを使っているので .zshrc に以下のように設定を追加します。

> echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
> echo 'eval "$(jenv init -)"' >> ~/.zshrc

java7, java8, java9 を jenv で使用できるように jenv add コマンドで追加します。

 > jenv add $(/usr/libexec/java_home -v 1.7)
 > jenv add $(/usr/libexec/java_home -v 1.8) 
 > jenv add $(/usr/libexec/java_home -v 9-ea)

バージョンの確認

 jenv versions
  system
  1.7
  1.7.0.80
* 1.8 (set by /Users/takuya/.jenv/version)
  1.8.0.92
  9-ea
  oracle64-1.7.0.80
  oracle64-1.8.0.92
  oracle64-9-ea

jenv global で使用する java のバージョンを指定

Java 1.8 を使用する

> jenv global 1.8

Java 1.7 を使用する場合

> jenv global 1.7

jenv local で特定のディレクトリで使用する Java のバージョンを指定

> java -version
java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

> mkdir java9
> cd java9
> jenv local 9-ea
> java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+102-2016-01-21-003129.javare.4316.nc)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+102-2016-01-21-003129.javare.4316.nc, mixed mode)

シェルを起動

> jenv exec zsh

JAVA_HOME が自動的に設定されるようにする

jenv は 環境変数JAVA_HOMEを 設定しません。
自動的に JAVA_HOME が設定されるようにするには
enable-plugin export を設定します。

> jenv enable-plugin export
> echo $JAVA_HOME
/Users/takuya/.jenv/versions/1.8
> cd java9
> java9 echo $JAVA_HOME
/Users/takuya/.jenv/versions/9-ea

disable-plugin export で解除される。

以上で 複数バージョンの Java を簡単に使うことができます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away