僕「これ Java 5 で動かして」Mac「おっけー、Java 6 で動かすね」

ふと、Google Web Tookit (GWT) を使ってみる気になった。Eclipse 上で開発できるらしい。
が、Mac OS X 10.6 (Snow Leopard) だと、現時点ではそれは無理なようだ。

何が起きるか

EclipseGoogle Plugin for Eclipse をインストールすると、GWTGoogle App Engine (GAE) を利用する Web アプリを簡単に開発することができる……ということになってるんだけど。実際に新規プロジェクトを作って、生成された Hello World 的なやつを実行しようとしたところ、コンソールに

You must use a Java 1.5 runtime to use GWT Hosted Mode on Mac OS X.

というメッセージが出力され、アプリが起動できなかった。Java 5 (Java 1.5) を使えと書いてあるけど、プロジェクトが使用する JRE を変更しても、Eclipse 自体が動作する JRE を変更しても、やはり起動することができない……。

なぜ起きるか

Snow Leopard には Java 5 が入ってるように見えて、実は入っていないらしい。入っているはずのところを見に行くと、Java 5 (1.5/1.5.0) のように見えるものは、実は Java 6 (1.6/1.6.0) へのシンボリックリンクになっている。

macbookpro:~ sardine$ cd /System/Library/Frameworks/JavaVM.framework/Versions
macbookpro:Versions sardine$ ls -l
total 48
lrwxr-xr-x  1 root  wheel    5  8 29 01:05 1.3 -> 1.3.1
drwxr-xr-x  3 root  wheel  102  7 21 08:35 1.3.1
lrwxr-xr-x  1 root  wheel   10  8 29 01:05 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10  8 29 01:05 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel    5  8 29 01:05 1.6 -> 1.6.0
drwxr-xr-x  8 root  wheel  272  8 29 01:45 1.6.0
drwxr-xr-x  9 root  wheel  306  8 29 01:45 A
lrwxr-xr-x  1 root  wheel    1  8 29 01:05 Current -> A
lrwxr-xr-x  1 root  wheel    3  8 29 01:05 CurrentJDK -> 1.6

どうしてこうなった

以下、Google 先生に本職の Web 検索をお願いして調べたメモ。

GWT を開発するとき、既存の Web ブラウザで表示を確認する他に、GWT SDK に入っている簡易ブラウザを使うことができる。開発中には簡易ブラウザの方が便利なので、Google Plugin for Eclipse から GWT アプリを実行する場合は、簡易ブラウザの方が使用される。で、その簡易ブラウザは、Standard Widget Toolkit (SWT) を使っているんだけど、使ってる SWT が 32 ビット版の JRE にしか対応していないらしい。
Mac OS X 10.5 (Leopard) の時は、

  • Java 1.4.2 (32 ビット版)
  • Java 5 (32 ビット版)
  • Java 5 (64 ビット版)
  • Java 6 (64 ビット版)

が利用できて、デフォルトでは Java 5 (32 ビット版) が使われるようになっていたらしい。なので、当時の Java 開発者の間では、「Java 6 を使いたい場合は、設定を変更して Java 6 が優先されるようにしましょう」とか「でも SWT が 32 ビットにしか対応してないんだよね。Java 6 の 32 ビット版はないから、残念だけど EclipseJava 5 でしか起動できないよ」とかって会話がなされていたようだ。Google Plugin for EclipseSWT を使っているので Java 6 上では利用できなかった。冒頭に挙げたエラーメッセージは、このことを示しているらしい。
時は移り 2009 年。Mac OS 10.6 (Snow Leopard) では、Java 6 の 32 ビット版が搭載され、その代わりに古いバージョンが削除された。結果として、選択肢は

  • Java 6 (32 ビット版)
  • Java 6 (64 ビット版)

の 2 つになった。32 ビット版であれば SWT も動くだろうから、GWT SDK の簡易ブラウザも使えそうな気がするけど、Google Plugin for Eclipse は相変わらず「あっ、Mac なのに Java 6 で起動してる! 大変なことになる前に私が止めなくちゃ!><」と思い込んでエラーを出力してくれちゃっている、という。

どうする、どうなる

とりあえずは、Eclipse 上からの実行は諦めざるを得ないみたい。
長期的には、GWT SDK がアップデートされて 32 ビット版の Java 6 でも使えるようになるかもしれない。

[2009-10-20 追記] いつのまにかバージョンアップが行われていた。下記の記事参照。

www.toyfish.blog