ふと、Google Web Tookit (GWT) を使ってみる気になった。Eclipse 上で開発できるらしい。
が、Mac OS X 10.6 (Snow Leopard) だと、現時点ではそれは無理なようだ。
何が起きるか
Eclipse に Google Plugin for Eclipse をインストールすると、GWT や Google 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 5 (32 ビット版) が使われるようになっていたらしい。なので、当時の Java 開発者の間では、「Java 6 を使いたい場合は、設定を変更して Java 6 が優先されるようにしましょう」とか「でも SWT が 32 ビットにしか対応してないんだよね。Java 6 の 32 ビット版はないから、残念だけど Eclipse は Java 5 でしか起動できないよ」とかって会話がなされていたようだ。Google Plugin for Eclipse も SWT を使っているので Java 6 上では利用できなかった。冒頭に挙げたエラーメッセージは、このことを示しているらしい。
時は移り 2009 年。Mac OS 10.6 (Snow Leopard) では、Java 6 の 32 ビット版が搭載され、その代わりに古いバージョンが削除された。結果として、選択肢は
の 2 つになった。32 ビット版であれば SWT も動くだろうから、GWT SDK の簡易ブラウザも使えそうな気がするけど、Google Plugin for Eclipse は相変わらず「あっ、Mac なのに Java 6 で起動してる! 大変なことになる前に私が止めなくちゃ!><」と思い込んでエラーを出力してくれちゃっている、という。