2016-06-19 86 views
3

顯然,有兩個Maven插件的GWT:net.ltgt.gwt.maven和org.codehaus.mojo GWT Maven插件有什麼區別?

這一個:

<groupId>net.ltgt.gwt.maven</groupId> 
<artifactId>gwt-maven-plugin</artifactId> 
<version>1.0-rc-6</version> 

這一個:

<groupId>org.codehaus.mojo</groupId> 
<artifactId>gwt-maven-plugin</artifactId> 
<version>2.8.0-SNAPSHOT</version> 

有什麼區別?

+0

它們只是由不同供應商提供的兩種不同的插件。這兩個項目在寫作時似乎都很活躍。關於一個人是否比另一個人好的討論並不真正與SO有關。 – Mena

回答

8

聲明:我是org.codehaus.mojo插件的前維護者,也是net.ltgt.gwt.maven之一的作者。

這些插件與使用Maven的GWT有很不同的方法;我會盡力在這裏總結最重要的。

首先,org.codehaus.mojo與特定版本的GWT綁定;這意味着只要發佈新版本的GWT來解決差異,就必須發佈新版本的插件。另一方面,它使用Maven文檔(mvn gwt:help)等將所有GWT選項/標記公開爲配置屬性。當插件中的bug被修復時,這也意味着你必須更新你的GWT版本以匹配下一個插件版本使用的版本;雖然你應該始終使用最新的GWT版本,但由於其他依賴項與新版本不兼容等原因,可能無法快速更新,因此您可能處於「版本衝突地獄」中。
net.ltgt.gwt.maven插件旨在與最新版本的GWT兼容,但很可能與更多兼容(它只是未經測試/保證);這意味着你可以獨立於GWT更新插件。
org.codehaus.mojo插件帶來了gwt-devgwt-user(和gwt-servlet!)的依賴關係,如果不是嚴格相同的話,這可能會導致與項目依賴項的依賴項發生衝突;另外,由於Maven的工作原理,如果您在不同的groupId下使用您自己的GWT版本的GWT,則無法將它們從插件的依賴項中排除(您必須使用com.google.gwtgroupId,或者讓插件改變它的依賴性) 。

net.ltgt.gwt.maven插件自定義packaging s代表gwt-libgwt-app。關於如何使用Maven完成GWT應用程序,我們非常自信:將客戶端和服務器(以及共享)代碼分離成單獨的Maven模塊(這實際上是遵循Maven Way™的:如果您需要單獨的類路徑,那麼您需要使用不同的Maven模塊,每個都有它們的依賴關係)。您當然不會被迫使用這些容器,他們只是通過設置適當的默認值和約定來削減POM中的相當多的配置。

最後,因爲在「項目佈局」即上述固執視圖中,net.ltgt.gwt.maven插件被設計爲支持多模塊(又名反應器)構建,這違背了org.codehaus.mojo插件,其中,例如,gwt:run必須是運行一個客戶端和服務器代碼都「活着」的項目;導致在多模塊構建中出現可怕的黑客攻擊,如不得不mvn install所有依賴項模塊(因爲不能在聚合器模塊上調用gwt:run)並使用build-helper-maven-plugin從其他模塊引入客戶端源以獲得無縫的開發體驗。

你可以看到插件之間的差異this commit在GWT-Maven的原型(免責聲明:我是作者)從org.codehaus.mojo切換到net.ltgt.gwt.maven插件。

+0

非常感謝您的詳細解答。我很高興我收到了參與這兩個項目的人的回覆。第二個似乎是我需要的。 –

+0

我的答案的問題是,它顯然是自以爲是的和主觀的;-) –

+0

哦,順便說一下,我們把GWT中的所有樣本從'org.codehaus.mojo'切換到'net.ltgt.gwt.maven':https: //gwt.googlesource.com/gwt/+/a0de97b999468b12d6c19d6a470ca03b2a2b4557%5E%21/(**不**使用'gwt-app'包裝) –

相關問題