最近、GWTを始めました。
で、今日のお題です。
いまGWTのモジュールを作っているところなのですが、google-collectionsが使いたくなりました。
ところがgoogle-collectionsのホームページによると、Guavaを使え、とのこと。はあ、そうですか。
で、ivyで次のように書くとguavaのjarが落ちてくる。
<dependency org="com.google.guava" name="guava" rev="latest.release" />
さすればGuavaのクラスが使えるようになったので、GWTでフツーにコーディング。
。。。ここでハタと気がついた。
『gwt.xmlにどのようなinheritエントリを追加すればいいんだ?』
そう、GWTのモジュールを定義する際にはgwt.xmlという定義ファイルを用意する必要があるのですが、
外部モジュールを使う場合、適切なエントリを追加してやらないとマトモに動きません。こんな感じ。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.1.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.1.0/distro-source/core/src/gwt-module.dtd"> <module> <inherits name="com.google.gwt.user.User" /> <inherits name="com.google.common.base.Base" /> ←コレを使いたい </module>
今回使ったのはcom.google.common.base.Stringsクラスです。
ということは、たぶんguava.jarの中にBase.gwt.xmlというファイルがあるのでは。。。無い!?
おいおい、どーすんだコレ。
どうやら
guava-gwt.jarというjarが追加で必要なようです(2011-01-08時点の最新版は"guava-r07-gwt.jar")。
で、この中にgwt.xmlが入ってます。
タチの悪いことにこのファイル、Mavenのリポジトリに登録されていないようです。
従って、Mavenのローカルリポジトリへ手動でンストールする必要があります。メンドクセー。
さすがにいい加減動けよコラ。
と思ったのですが、今度はこんなエラーが大量に出ます。
[DEBUG] [gwtsample.SamplePage] - Validating newly compiled units [ERROR] [gwtsample.SamplePage] - Errors in 'jar:file:/.ivy2/cache/com.google.guava/guava-gwt/jars/guava-gwt-r07.jar!/com/google/common/base/Equivalence.java' [ERROR] [gwtsample.SamplePage] - Line 20: The import javax.annotation cannot be resolved [ERROR] [gwtsample.SamplePage] - Line 56: Nullable cannot be resolved to a type [ERROR] [gwtsample.SamplePage] - Line 56: Nullable cannot be resolved to a type [ERROR] [gwtsample.SamplePage] - Line 65: Nullable cannot be resolved to a type ...
どうやら、GuavaのクラスをGWTコンパイルする際に、
それらが参照しているNullableアノテーションのクラス&ソースコードが必要な模様です。
で、それはここにあります。jsr305.jarというのがそれ。
http://code.google.com/p/guava-libraries/source/browse/trunk/lib/jsr305.jar?r=146
(#゚Д゚)ゴルァ!!
まだ同じエラーが出ます。(Nullable cannot be resolved to a type)
どうやら、GWTの開発ツール(デバッガみたいなヤツ)の起動クラスパスにも、
先程のjsr305.jarを追加してやらなければならないようです。
Eclipseの『実行の構成→(GWTの開発ツール)→ユーザー・エントリー』に、jsr305.jarを追加。(一番上の赤丸)
パッと見、起動しているプロジェクトがクラスパスに入っていても(ユーザー・エントリの一番下)、
ダメのようです。明示的にjarを追加してやる必要があります。
やっと
動きました。あーメンドクサ。guava-r08では解消されていることを切に祈ります。
2011-01-18追記
guava-gwt.jarがMavenリポジトリに存在しない問題は、どうやら近日中に対応される模様です。
http://code.google.com/p/guava-libraries/issues/detail?id=501