TL;DR
目前找不到從 mojo 跳到 tbroyer 的理由,甚至有可能想跳也跳不過去… 囧rz
測試環境
- JDK 1.8(但是
maven.compiler.*
是給 1.7) - Maven 3.2.1
- GWT 2.7.0
- GXT 3.1.0
- guava-gwt 19.0
- tbroyer Maven Plugin for GWT 1.0-rc-10
這兩天(終於)試了一下 tbroyer 版的 GWT Maven plugin,結果還蠻慘烈的。
首先是 GF 改成 tbroyer 版(據說 GMD 前陣子也改了,想跟風),把 pom.xml
的 package
改成 gwt-lib
作 mvn install
好像也沒啥用、source code 沒有跟著包進去,不確定到底發生了啥事情。因為只是個 library project,於是決定跳過,專心搞 app project。
拿了一個發展緩慢的 project 來試試看(aka 在改版之前是能正常 build 的),沒想到 SDM 開不起來,一直炸 NPE…
從官方文件上看不出異常,只好去他的 integration tests 跟 GMD demo project 裡頭找答案。盲目地一個一個把東西加上去之後,終於發現是 plugin.configuration
裡頭得設定 moduleName
(也許 moduleShortName
也要?沒有詳測),即使 skipModule
已經給 true
了… =="
現在回頭檢討,其實官方文件 Usage 第一步就有說要設定(GWT)module,只是跟第四步的 generate-module
搞混了… [被毆飛]。這也產生第一個吐點:「mojo 版不用設定 GWT module」
事情還沒完,目前看起來 tbroyer 版在 generate-resources
phase 只有作(個人認為不痛不癢)gwt.xml
的 generator。所以原本 mojo 版會幫忙生的 RpcServiceAsync
現在也沒了(看 integration tests 裡頭有 GWT RPC 的範例也是直接給 code),以此類推恐怕 I18N 也得自己搞了?
好,沒關係,即使我這個 GWT RPC 鐵粉也在考慮是不是該拋棄(尤其前陣子試 gwt-jackson 成功、而 AsyncCallback.onFailure()
從來沒處理過 XD),I18N 也不知道有沒有那個命去處理到,大不了在 JISS 裡頭也再搞個 code generator 嘛!這部份無視跳過!
結果還是繼續炸 error,而且這下真的死透了:
- guava(
Future
跟CountDownLatch
)用到java.lang.InterruptedException
但是沒有 source code- 而且見鬼了,拿來測試的 project 裡頭只有因為 GF 宣告而 inherit
com.google.common.base.Base
,所以應該沒 inherit 到Concurrent
的東西…
- 而且見鬼了,拿來測試的 project 裡頭只有因為 GF 宣告而 inherit
- GXT 的
XmlReader.XmlSplittable
有 abstract method 沒實作?
立馬切回去 mojo 版,還是可以正常開啟 SDM… WTF?一個 GWT compiler 各自表述?去狗了一下 GXT 有沒有災情… 沒找到,倒是發現 GXT 4.x 文件給的 archetypes 依然還是在用 mojo 版…
這下也懶得再去找看看是不是改個設定 or 版本就能解決,直接宣告放棄。
結論
整體看起來還是 mojo 版比較實在,tbroyer 版看起來比較像是一個理想崇高但是缺乏廣泛使用回饋的產物?
也許哪一天徹底跟 GWT RPC 以及 GXT 說掰掰再來考慮?是說那時我能理解 tbroyer 版的優點嗎? Orz