Macにjava 1.7.0をインストール

背景

Mac OSX 10.7.5において、java 1.7.0をインストールしたときのこと。
java公式からVersion 7 Update 25をダウンロードし、インストールしてみても、

$ java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

と1.6.0から変わっていない。

以前までなら/Applications/Utilities/Java Preferences.appを起動して実行バージョンの優先度を入れ替えるだけで済んだのだが、Java Preferences.appが無くなっている・・・

Mac OSX 10.8.4のまっさらな状態のマシンに同じくjava 1.7.0してみても、javaコマンドを打ってみると1.7.0は認識されておらず、1.6.0のインストールのダイアログが出てしまう。

調査

MacにおけるJavaの構成は中々に厄介だ。
以前からJavaをインストールしてあったOSX 10.7.5において、Javaコマンドの向き先を見てみると

$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxr-xr-x  1     74B  6 25 22:53:25 2013 /usr/bin/java@ -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
$ cd /System/Library/Frameworks/JavaVM.framework/Versions/                
$ ls -l
total 64
lrwxr-xr-x  1     10B  6 25 22:53:25 2013 1.4@ -> CurrentJDK
lrwxr-xr-x  1     10B  6 25 22:53:25 2013 1.4.2@ -> CurrentJDK
lrwxr-xr-x  1     10B  6 25 22:53:25 2013 1.5@ -> CurrentJDK
lrwxr-xr-x  1     10B  6 25 22:53:25 2013 1.5.0@ -> CurrentJDK
lrwxr-xr-x  1     10B  6 25 22:53:25 2013 1.6@ -> CurrentJDK
lrwxr-xr-x  1     10B  6 25 22:53:25 2013 1.6.0@ -> CurrentJDK
drwxr-xr-x  8    272B  6 25 23:37:11 2013 A/
lrwxr-xr-x  1      1B  6 25 22:53:26 2013 Current@ -> A
lrwxr-xr-x  1     59B  6 25 22:53:25 2013 CurrentJDK@ -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Aって何だよと思うのですが、Appleの解説によると、異なるバージョン毎にA,Bとディレクトリを分けるらしい。

1.7.0はこのディレクトリには入っていません。
何処にあるかというと/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin

$ pwd
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin
$ ./java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

ありました。

解決策

/System/Library/Frameworks/JavaVM.framework/Versionsに1.7.0へのシンボリックリンクを作成します。

sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/ /System/Library/Frameworks/JavaVM.framework/Versions/1.7.0

そしてzshrcbashrcJAVA_HOMEを設定します。

export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0"

10.8.5の場合

/etcに以下の内容のlaunchd.confを作成して再起動でもOK

setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.7.0