読者です 読者をやめる 読者になる 読者になる

MacでHomebrewを使用して複数バージョンのJava (JDK) をインストールして切り替える方法+アップデート

Java
スポンサーリンク

Macで複数バージョンのJavaをインストールして切り替える方法です。ちょっとわかりにくかったので調べて試した事をまとめておきます。

Javaのダウンロードとインストール

Oracleのホームページからダウンロードしてもいいんですが、面倒なので  brew cask brew-versions を使用します。

$ brew cask search java
==> Exact match
java
==> Partial matches
eclipse-java java6 java7 javafx-scene-builder yourkit-java-profiler


$ brew cask install java7
==> Caveats
This Cask makes minor modifications to the JRE to prevent any packaged
application issues.

If your Java application still asks for JRE installation, you might need to
reboot or logout/login.

The JRE packaging bug is discussed here:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361

Installing this Cask means you have AGREED to the Oracle Binary Code License
Agreement for Java SE at

http://www.oracle.com/technetwork/java/javase/terms/license/index.html

==> Downloading http://download.oracle.com/otn-pub/java/jdk/7u76-b13/jdk-7u76-macosx-x64.dmg
######################################################################## 100.0%
==> Running installer for java7; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is JDK 7 Update 76
==> installer: Installing at base path /
==> installer: The install was successful.
🍺 java7 staged at '/opt/homebrew-cask/Caskroom/java7/1.7.0_76' (5 files, 186M)

インストールが完了したら次のディレクトリに保存されます。

$ ls /Library/Java/JavaVirtualMachines/
jdk1.7.0_76.jdk jdk1.8.0_05.jdk

/System/Libraryの方にも CurrentJDK が追加されました。 1.6 もインストールして試してみましたが、ここの CurrentJDK はどうやら最後にインストールしたバージョンでシンボリックリンクが作られてる感じみたいで、これでバージョンが切り替わる訳ではなさそうです。

$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 16
drwxr-xr-x 9 root wheel 306 12 2 00:08 A
lrwxr-xr-x 1 root wheel 1 11 29 16:16 Current -> A
lrwxr-xr-x 1 root wheel 58 4 4 18:41 CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_76.jdk/Contents

この時点ではまだ 1.8 を参照してるようなのでバージョンの切り替えが必要になってきます。

$ java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

ちなみにJavaに関するコマンドのjavaとかjavac/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commandsディレクトリを参照してるようです。

$ ll /usr/bin/java
lrwxr-xr-x 1 root wheel 74 4 5 15:34 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
$ ll /usr/bin/javac
lrwxr-xr-x 1 root wheel 75 4 5 15:34 /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
$ ll /usr/libexec/java_home
lrwxr-xr-x 1 root wheel 79 4 5 15:34 /usr/libexec/java_home -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home

Javaのアップデート

Javaをアップデートしたい場合は再度インストールする形になります。

初めにbrew updateでパッケージを更新してからバージョンを確認します。

$ brew cask info java
...
==> Contents
  JDK 8 Update 45.pkg (pkg)
...

インストールしたいバージョンが表示されていたらインストールします。

$ brew cask install java

この状態だと古いバージョンも残ってしまうので削除して下さい。

$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk
$ sudo rm -rf /opt/homebrew-cask/Caskroom/java/1.8.0_40

バージョンが変わっていたら成功です。

$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

もしインストールが出来なかった場合は最初にアンインストールして下さい。

$ brew cask uninstall java

Javaのバージョンを切り替える

色々調べて試した結果/usr/libexec/java_homeコマンドを使うのが一番スッキリして簡単でした。~/.bash_profile~/.zshrcにJAVA_HOME環境変数の設定を追加します。

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

追加したらsource ~/.bash_profileで再読み込みするとバージョンが切り替わります。Java8 に戻したい時は-v 1.8に変更しましょう。

$ java -version
java version "1.7.0_76"
Java(TM) SE Runtime Environment (build 1.7.0_76-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.76-b04, mixed mode)

現在有効なJDKのバージョン

/usr/libexec/java_homeのみで実行すると現在有効なJDKのディレクトリパスが表示されます。しかしバージョンを切り替えてもここは 1.8 のままです。なんでだろう...。  java_home(1) Mac OS X Developer Tools Manual Page を見てもJAVA_HOMEの値を返すようになってると思うんですが。

$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_76.jdk/Contents/Home

インストールされているJDKの一覧

同じく/usr/libexec/java_homeコマンドを使うとインストールされてる一覧を確認できます。

/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
1.8.0_40, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
1.7.0_76, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_76.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

参考記事

 Java - MacでJDKのバージョンを切り替える - Qiita

 java_home(1) Mac OS X Developer Tools Manual Page

関連記事

 Homebrew-caskでMacのGUIアプリケーション管理 - TASK NOTES

 Homebrew-versionsでcask installしたアプリケーションのバージョンを選択する - TASK NOTES