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