2013-02-22 34 views
5

我剛剛開始使用Maven作爲構建系統進行GWT開發。是否有GWT Maven項目結構,這不會混淆責任?

我來自Java + Flex世界,很自然地我有客戶端模塊和服務器端模塊乾淨地分開。

在深入挖掘GWT的最佳實踐並深入挖掘的同時,對我來說,GWT項目的默認配置越來越像是一團糟的責任。尤其是涉及到多模塊項目時。

我明白了,約定規定服務器端邏輯屬於「服務器」包,共享代碼「共享」,並由GWT編譯器在「客戶端」包中編譯爲HTML + JavaScript。所有的代碼都轉到src/main/java。到現在爲止還挺好。

不管我怎麼試着看到它......對我來說,在「客戶端」包中的東西簡直就是死代碼。即使Java編譯器將其編譯爲類,這些類也不會在運行時使用,只需要在編譯階段向GWT編譯器提供輸入。所以即使它看起來像Java,它實際上也不是,只是看起來像Java。有些人覺得很髒,把它們放在與「實時」代碼相同的罐子裏。

不會像這樣更有意義行家結構:

/src/ 
/src/main/ 
/src/main/java 
/src/main/shared 
/src/main/gwt 

而且具有Java的編譯器插件使用的src/main/java和的src/main /共享和GWT編譯器使用src/main/gwt和src/main/shared?

如果構建會產生兩種類型的工件,包括來自src/main/java和src/main/shared的clases的普通「jars」和第二個「gwt」包含src/main/gwt和src/main/shared的類和源。

我不會添加一個依賴到一些混合jar,但可以決定是否要導入一些GWT組件或如果我想導入一些服務器端功能。

接下來的事情就是GWT默認是將XML,資源和其他東西放在src/main/java目錄... XML & &資源!=的Java ;-)

或者是有一個真正原因所有這一切,我只是還沒有意識到......或者我只是開始變得骯髒,而不是像這樣的東西?

Chris

回答

3

我也嘗試將GWT客戶端代碼與服務器端代碼分開。我用過的方法是擁有一個頂級項目,其中有兩個子項目,一個用於服務器端,一個用於客戶端。頂級項目有一個包含每個子項目元素的pom.xml。

客戶端項目包含src/main/java中的GWT java源文件和src/main/webapp中其餘的webapp文件。服務器端項目只包含服務器端代碼。

可能不是最整潔的解決方案,但至少有更清晰的分離。

+0

我剛剛討論了一個場景,其中我的服務器包中有一個Sample Singleton,並且很容易從客戶端代碼調用此方法。所以對我來說,清潔靈魂將有3個項目(客戶,共享,服務器)......但我想這會大大地打擊事情。 – 2013-02-22 11:53:13

+0

我從不打擾共享,我不喜歡GWT RMI,太混亂。我只是將XML用於客戶端/服務器通信。 GWT有xml處理。 – NickJ 2013-02-22 13:10:41

5

前段時間我得出了同樣的結論,並創建了一些幫助開始的原型:https://github.com/tbroyer/gwt-maven-archetypesannouncement)。

那些原型仍然有*.gwt.xml等。到src/main/java,因爲Google Plugin for Eclipse不支持將它們放到其他任何地方(我聽說它已在最近版本中修復,但尚未檢查)。

+0

我想如果gwt-maven-plugin被擴展爲提供(例如)「gwt」的自定義打包類型,那麼一個真正乾淨的解決方案就是。在這樣一個gwt-artifact中,我可以依賴jar和gwt工件,默認的代碼位置是(例如)src/main/gwt。在這種情況下,我沒有混合使用GWT僞罐和真正的Java罐,但是我可以從GWT中引用真正的Java代碼。我的服務器classpath中沒有死類。任何人都會立即看到它實際上是GWT代碼。 – 2013-02-22 16:58:05

+0

我正在研究這樣的事情(如果你想要的話,我的GitHub上的早期原型)。你仍然不會在同一個Maven模塊中混合使用客戶端和服務器(想一想:GWT需要源代碼和編譯類,所以你需要調用javac,最好是通過maven-compiler-plugin,使用不同的源代碼如服務器端的路徑 - 易於和類路徑;也有一些服務器端組件和GWT編譯器或DevMode之間不兼容,所以你需要將一些代理隔離爲僅服務器和其他一些共享;這就是而不是Maven的做法,只是拆分模塊) – 2013-02-22 17:05:19

+0

嘿......我很高興將這兩件事分開了:-)所以,隨着你的改變,會不會有gwt工件和jar工件的設置?這會很好。剛看了一下你的github回購...這確實是一個「早期的原型」;-) – 2013-02-23 16:37:18