測試環境
- JDK 1.8(但是
maven.compiler.*
是給 1.7) - Maven 3.2.1
- GWT 2.7.0
- GXT 3.1.0
- mojo Maven Plugin for GWT 2.7.0
- Tomcat7 Maven Plugin 2.2
JDK 8 + GWT 2.8 失敗
想把 GWT 升到 2.8 已經很久了,發神經的時候 try 一下通常都炸一堆,就回到懶惰狀態,所以一直就擺著… (艸
前陣子終於初步搞定 jgit,但是它指定要吃 JDK 1.8+,可是 GWT 2.7 只停在 JDK 1.7,這就有升的動力…
然後就被 GXT 擊落了,原因不明,總之 GXT 3.x 只支援到 JDK 1.7
還懶得搞定 Sencha 的 Maven Repo 設定(而且誰知道升到 4.x 會不會有新炸點…),只能繼續維持現狀。
gwt-user 的 scope
因為逐漸擺脫 GWT-RPC,加上 Eclipse 裡頭跑 Tomcat 常常會因為偵測到檔案變動(雖然變動的是 GWT client code)而 restart server(但有些 project 還不會,不明所以… 😱),所以後來也會回頭用 Tomcat Maven Plugin 來啟動 web server。
有一天要啟動時突然炸了 exception,癥結點應該是:
gwt-user-2.7.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
雖然不懂為啥之前都沒炸,不過狗了一下發現好像也不是只有我炸。解決辦法就是把 gwt-user
的 dependency scope 設定為 provided
。解法出處 還順便說了一下設定 provided
的好處。
本來也都相安無事的,直到要作 mvn install
的時候炸了:
GWT Module com.google.web.bindery.requestfactory.RequestFactory not found in project sources or resources.
這真的是莫名其妙,因為 SDM 一直都跑得好好的,為啥 SDM 沒吭過半聲?而且我還沒(直接)用 RequestFactory
咧… 拿掉 provided
的設定就又沒事了。
Tomcat 不能跑事小,mvn install
會錯誤就大條了。所以還是拔掉 provided
的設定。
Tomcat 不能用,那就來試試 jetty 吧。由於 JDK 只能停在 JDK 1.7,所以回頭找了 jetty 8 的版本(註:jetty 9 似乎要 JDK 1.11 才能跑… =="):
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
</plugin>
除了啟動後的 URL 少了 app 名稱,直接從根目錄起算,其他都沒啥問題(或是還沒炸到 XD)。