Mac OS X 10.9 (Marvericks) にHomebrewをインストールしたときにはまったこと

インストール環境

はまった内容

巷のサイトにあるようにJREをインストールしても、ターミナルでjavaのパスがうまく通らない。

インストール後も以下のように、インストールされていないよと言われる。

% java -version
No Java runtime present, requesting install.

「システム環境設定」を開くと、最下部にJavaのアイコンがあるため、インストールされていることはわかった。

JREのパスはデスクトップから「システム環境設定」→「Java」→「Javaコントロール・パネル」→「Java」タブ→「表示」から確認できた。

調べてみると、どうやらJREJAVA_HOMEが「/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home」であるため、「/usr/bin/java」で起動できるように一工夫が必要ということが分かった。

以下の手順でターミナル上からjavaコマンドにパスを通すことができた。

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

% vi .zshrc
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0

% source .zshrc

% java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

ただ、何か腑に落ちない。

試しに、上記の設定を一旦削除し、JDKをインストールしてみた。 ※JREをインストールしてから1週間程度たっていたため、Versionが1.7.0.u51をインストール。

すると、普通にパスが通った。

javaコマンドのパスを辿ってみる。

% which java                                                                                                                                    
/usr/bin/java

% ls -l /usr/bin/java                                                                                                                           
lrwxr-xr-x  1 root  wheel  74 10 31 15:52 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

% ls -l /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java                                                              
-rwxr-xr-x  1 root  wheel  50432 10 31 15:52 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

% ls -l /System/Library/Frameworks/JavaVM.framework/Versions/Current                                                                            
lrwxr-xr-x  1 root  wheel  1 10 31 15:52 /System/Library/Frameworks/JavaVM.framework/Versions/Current -> A

% ls -l /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java                                                                    
-rwxr-xr-x  1 root  wheel  50432 10 31 15:52 /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java

% /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java -version                                                                 
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

幾つかのサイトによれば、JDKは「Library/Java/JavaVirtualMachines」配下にVersionを分けてインストールされるようだ。

% ls -l /Library/Java/JavaVirtualMachines                                                                                                       
total 0
drwxr-xr-x  3 root  wheel  102  1 25 15:13 jdk1.7.0_51.jdk

% ls -l /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home                                                                         
total 39768
-rw-rw-r--   1 root  wheel      3339 12 19 12:13 COPYRIGHT
-rw-rw-r--   1 root  wheel        40 12 19 12:13 LICENSE
-rw-rw-r--   1 root  wheel       114 12 19 12:13 README.html
-rw-rw-r--   1 root  wheel    123324 12 19 06:34 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-rw-r--   1 root  wheel    173559 12 19 12:13 THIRDPARTYLICENSEREADME.txt
drwxrwxr-x  44 root  wheel      1496 12 19 12:19 bin
drwxrwxr-x   9 root  wheel       306 12 19 12:13 db
drwxrwxr-x   9 root  wheel       306 12 19 12:13 include
drwxrwxr-x  10 root  wheel       340 12 19 12:16 jre
drwxrwxr-x  14 root  wheel       476 12 19 12:17 lib
drwxrwxr-x   5 root  wheel       170 12 19 06:34 man
-rw-rw-r--   1 root  wheel       502 12 19 12:13 release
-rw-rw-r--   1 root  wheel  20039662 12 19 12:13 src.zip

% /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java -version                                                             
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

確かに動作はするようだが、「/System/Library/Frameworks/JavaVM.framework/Versions」との関連性は見えてこない。

いったいどれが本物なのか。。。

どれもバイナリファイルなので、感覚だけではこの辺が限界だった。

もう少し、調査が必要だ。