Mac で複数のバージョンの Java を使い分ける(jenv を用いる)

概要

  • jenv を用います
  • Java 自体は Oracle のサイトから dmg でダウンロードします(ユーザ登録が必要です)

具体的な手順

1. jenv をインストールする

他の Xenv と同様に、git clone して、シェルの設定ファイルに追記をします。以下、公式ドキュメントをそのまま引用します。

git clone https://github.com/jenv/jenv.git ~/.jenv
# Shell: bash
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
# Shell: zsh
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

2. Java のバイナリをダウンロードする

Oracle Java Archive から Java のバイナリをダウンロードします。一部のバージョンの Java はこちらよりも新しいバージョンが存在するので*1、適宜探してみて下さい。なお、ダウンロードするためには Oracle のアカウントが必要になります。

2019/02/17 現在で私がダウンロードできたバージョン(ファイル名)は以下のとおりです。

  • jdk-7u80-macosx-x64.dmg
  • jdk-8u202-macosx-x64.dmg
  • jdk-9.0.4_osx-x64_bin.dmg
  • jdk-10.0.2_osx-x64_bin.dmg
  • jdk-11.0.1_osx-x64_bin.dmg

3. Java をどかどかインストールする

ダウンロードしたバイナリをどんどんインストールします。異なるバージョンは別々に管理されますので、上書きを気にする必要はありません。

4. インストール状況を確認する

/usr/libexec/java_home -V を実行してインストール状況を確認します。私は以下のようになりました。一番最後の行は現在用いているバージョンです。

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    11.0.1, x86_64: "Java SE 11.0.1"    /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
    10.0.2, x86_64: "Java SE 10.0.2"    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    9.0.4, x86_64:  "Java SE 9.0.4" /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
    1.8.0_202, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
    1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home

5. jenv にそれぞれのバージョンをどかどか追加していく

jenv に それぞれのバージョンの Java をどんどん追加していきましょう。jenv add ディレクトリ名 です。私は以下のようになりました。

$ jenv add /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
oracle64-11.0.1 added
11.0.1 added
11.0 added

$ jenv add /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
oracle64-10.0.2 added
10.0.2 added
10.0 added

$ jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
oracle64-9.0.4 added
9.0.4 added
9.0 added

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
oracle64-1.8.0.202 added
1.8.0.202 added
1.8 added

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
oracle64-1.7.0.80 added
1.7.0.80 added
1.7 added

6. jenv versions コマンドを実行して正しく登録されたかを確認する

先ほどの jenv add コマンドの実行によって jenv に複数の Java が正しく登録されたかを確認します。私は以下のようになりました。

$ jenv versions
* system (set by /Users/USERNAME/.jenv/version)
  1.7
  1.7.0.80
  1.8
  1.8.0.202
  10.0
  10.0.2
  11.0
  11.0.1
  9.0
  9.0.4
  oracle64-1.7.0.80
  oracle64-1.8.0.202
  oracle64-10.0.2
  oracle64-11.0.1
  oracle64-9.0.4

7. jenv global コマンドを実行して普段使うバージョンを指定する

あとは他の Xenv コマンドと同じです。jenv global コマンドを実行して、普段使うバージョンを 1.8.0.202 に指定します。

$ jenv global 1.8.0.202

実行したらバージョンを確認します*2

$ jenv versions
  system
  1.7
  1.7.0.80
  1.8
* 1.8.0.202 (set by /Users/takiya/.jenv/version)
  10.0
  10.0.2
  11.0
  11.0.1
  9.0
  9.0.4
  oracle64-1.7.0.80
  oracle64-1.8.0.202
  oracle64-10.0.2
  oracle64-11.0.1
  oracle64-9.0.4

$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

8. 特定ディレクトリ配下ごとにバージョンを変えたい場合

特定のディレクトリ配下を特定のバージョンに変えたい場合は jenv local コマンドを使います*3

$ jenv local 1.7.0.80

上記コマンドを実行すると実行したディレクトリに .java-version が生成されており、その中にバージョン番号が書いてあります。このファイルがあれば、そのファイルがあるディレクトリ配下では、書いてあるバージョンで Java が実行されます。

参考

*1:Java 8 とか

*2:状況によっては一度シェルに入り直す必要があります

*3:他の Xenv コマンドと同じです

Powered by はてなブログ