GWTライブラリの中身

2018年8月23日

GWT-SDKをダウンロードして展開したり、EclipseのGWTプラグインでそれを指定したりすると、複数のjarファイルを利用することになるのだが、それぞれのjarファイルは具体的に何の目的なのかを探ってみる。

jarファイルの種類

GWT-SDKの中身

GWT-SDK(この例では2.8.2)を展開すると、展開されたフォルダの直下に以下のファイルが現れる。

Eclipseで使用されるjar

EclipseのGWTプラグインでGWTの使用を指定すると、以下がライブラリとして追加される。

各jarの役割

Explanation of GWT dependenciesに全体的な説明はあるものの、概要であり、具体的なところまではわからない。

gwt-user.jarとgwt-servlet.jar

gwt-user.jarは開発時のみに必要となり、warデプロイ時には必要ない。基本的には、gwt-user.jarにはクライアント側開発の基本部分が含まれているのだが、コンパイルされた後は、それらは一切不要になる(すべてがJavaScriptに変換されてしまうので)。

gwt-user.jarの中身をサーバ側コードが使うこともあることはある。

例えば、com.google.gwt.user.client.rpc.RemoteServiceRelativePathアノテーションは、クライアント側で定義されたRPCインターフェースをアノテートするもので、これはサーバ側からも利用することがある。

しかし、実はgwt-servlet.jarにもこのクラスが含まれている(実際に中身を調べてみればわかる)。したがって、もしこれをサーバ側が使用していても、やはりgwt-user.jarは不要で、gwt-servlet.jarがあればよい。

参考:gwt-user.jar and gwt-servlet.jar

gwt-dev.jarとgwt-codeserver.jar

gwt-dev.jarにはgwtコンパイラが含まれるらしい。したがって、開発時のみに必要。gwt-codeserver.jarは名前の通り、CodeServerであり、現在の環境では、Super Dev Modeを使う時にのみ必要。

したがって、どちらのjarもデプロイ時には不要。

validation-api*.jar

中身はjavax.validationというパッケージになっている。つまり、GWTプロジェクトの一部では無い。これはJavaEEのBean Validationというものらしい。これはJava Beanのプロパティ値としてとりうる値の制約をアノテーションで指定するもののようだ。

GWTデベロッパガイドValidation にもこの件の説明がある。以下は名前として最低4文字必要という制限をする例だ。

public class Person implements Serializable {
  @NotNull
  @Size(min = 4, message = "Name must be at least 4 characters long.")
  private String name;
}

そして、GWTはクライアントのコンパイル時に、この指定があるとバリデーションを行うコードを生成するという。したがって、クライアント側でのみ使用した場合には、デプロイ時には不要である。

当然のことだが、サーバ側で使用した場合には、デプロイ時に必要になってくる。

requestfactory-*

このjarとしては、apt, client, serverなどと数が多い。これもやはりGWTデベロッパガイドRequest Factoryに説明がある。

リクエストファクトリとは要するにGWT RPCに代わる新たなものであり、よりデータ中心的になるもののようだ。後で詳細を見てみることにする。

したがって、これまでの通常のGWT RPCを使う分には全く不要ということになる。

gwt-api-checker.jar

これはGWTそれ自体の互換性のチェックのためのものとのことである。ユーザ側コードのチェックをも意図しているのかどうかは不明。だが、基本的には不要物である。

gwt-elemental.jar

これもGWTデベロッパガイドElementalで説明されているもののようだ。

これはHTML5の先端的な機能、つまり、WebGL, WebAudio, WebSockets, WebRTC, Web Intents, Shadow DOM, the File APIを使うものだという。が、しかし、例の貧弱さから言って、開発は停止しているのではないだろうか?中身のパッケージ名も正式なものではなく、elemental.某となっている。

おそらくは、これを使用するよりも、他のGWT用ライブラリを探した方がよいだろう。

gwt-servlet-deps.jar

このjarの中身は、javax.validationとcom.google.gsonだ。つまり、gwt-servlet.jarのどこかでこの二つを使っている場所があるのだろうが、もちろんvalidation-apiとgsonが他に用意されていれば必要はない。

依存にしなかった理由は、必ずしも必要ではないからだろう。具体的にgwt-servlet.jarのどのような機能で使われているのかは不明。

結論

結局のところ、基本的にはGWTコンパイル時には必要なものすべてを指定すればよい。余計なものまで指定しても、それらは結果には含まれないので構わない。

デプロイ時には、gwt-servlet.jarのみで良いことになるのだが、もちろんサーバ側でGWT RPC等を使用していなければ(考えにくいが)、それさえも不要。この場合、GWT関係のライブラリは一切デプロイされないことになる。