gwt-devのJettyを変更する方法
jettyについての全投稿は/tag/jettyにあるので参照されたい
gwt-devにはJettyが組み込まれている。これは開発時にのみ使用されるものであり、デプロイ時には不要になるのだが、そうすると、開発環境とデプロイ環境で異なるJettyのバージョンとなってしまう可能性もある。
これを統一するには、どうすれば良いのか?つまり、
- あるバージョンのgwt-dev中では、どのバージョンのJettyが使われているのか?
- gwt-devのJettyを無視して、別のバージョンのJettyを開発環境で使う方法はあるのか?
以下に解説してくれている人がいる。
gwt-devに使われているJettyバージョンを知る方法
GWTはオープンソースであり、https://gwt.googlesource.com/gwt/にそのソースコードがあるようだ。
例えば、いまGWT2.8.2のJettyバージョンを知りたいとすると、Tagsから2.8.2を選択し、dev/というフォルダを選択し、build.xmlを見てみる。つまり、https://gwt.googlesource.com/gwt/+/2.8.2/dev/build.xmlになる。
ここでjetty関係を探してみると、複数あるのだが、おそらくこれだろう。
<include name="jetty/jetty-9.2.14.v20151106/jetty-all-9.2.14.v20151106.jar"/>
つまり、2.8.2環境で開発したものをデプロイする場合には、一緒にjetty-9.2.14.v20151106を組み込んでやればよい。
ちなみに、過去のGWTバージョンで組み込まれるJettyのバージョンとしては以下だ。
- 2.6.1 : jetty-8.1.12.v20130726
- 2.7.0 : jetty-8.1.12.v20130726
- 2.8.0 : jetty-9.2.14.v20151106
- 2.8.1 : jetty-9.2.14.v20151106
- 2.8.2 : jetty-9.2.14.v20151106
GWTバージョン毎に変わるわけではなく、ある程度同じバージョンのJettyを長い期間使うことがわかる。
gwt-devに使われているJettyとは別のJettyを使う方法
ServletContainerLauncherを使えとある。これはabstractクラスなので、この実装を作成して、それクラスをDev Modeでの起動時に指定するらしい。Dev Modeの起動パラメータは以下にある。
https://gwt-plugins.github.io/documentation/gwt-eclipse-plugin/reference/DevMode.html
この中の以下の部分だ。
-server Specify a different embedded web server to run (must implement ServletContainerLauncher)
そして、デフォルトで使われているServletContainerLauncherの実装が、「com.google.gwt.dev.shell.jetty.JettyLauncher」である(GWT2.8.2の場合)。
要するに、これをまるまるコピーして、自分で用意したJettyのバージョンを動かすようにすれば良いらしいが、しかし、gwt-dev.jarに入っているJettyとパッケージ名が全く同一であるのに、どうやって別の実装を使わせれば良いのだろうか。。。。
追加:
Java12上でDevModeを動作させるという必要にせまられ、Jettyを最新版にしてみた。GWT2.8.2をJava9以上で動かすにて説明している。
先の-server引数指定は、元のgwt-dev.jarのままでJettyを使う限りは意味がない。なぜなら、このままJettyの最新版を入れたとしても、相変わらずgwt-dev.jarの中の古いバージョンが使われてしまう可能性が高いからだ。