2011-05-20 52 views
2

我有一個項目具有多個gwt模塊,其中一個模塊是沒有其他模塊從中繼承的入口點的庫模塊。所有模塊都包含在使用maven和gwt-maven-plugin構建的單個項目中。不幸的是,構建項目失敗了,因爲gwt:compile在編譯繼承它的主模塊時正在尋找類路徑上的繼承模塊。如何在類路徑上獲取庫模塊以編譯主模塊?GWT獲取編譯器類路徑上的繼承模塊

回答

2

好的,我可以通過在項目的pom文件的gwt-maven-plugin配置中明確列出我的GWT模塊來解決這個問題。通過這樣做,我可以執行GWT編譯的順序,確保共享模塊首先被編譯,並在其編譯期間從其繼承的其他模塊可用。

下面是配置的一個例子:

<configuration> 
    <modules> 
    <module>com.foo.gwt.shared.Shared</module> 
    <module>com.foo.feature.one.gwt.One</module> 
    <module>com.foo.feature.two.gwt.Two</module> 
    </modules> 
</configuration> 

感謝Jason482所有幫助。

5

你需要做一些有創意的「Maven-ing」,因爲我只是用這個詞來形容它。 (實際上它可能根本就沒有創意,但我自己也是一個Maven新手,所以它也讓我困惑了一段時間)。

你說得對在一定意義上,GWT comipler 尋找繼承模塊在classpath源當它試圖編譯你的「主」模塊。爲了達到這個目的,你需要在庫模塊的源文件中添加一個依賴項(主要用於編譯階段)。

事情是這樣的:

... 
<artifactId>main-module</artifactId> 
... 
<dependency> 
    <groupId>library-group</groupId> 
    <artifactId>library-artifact</artifactId> 
    <type>jar</type> 
    <version>0.1-SNAPSHOT</version> 
    <classifier>sources</classifier> 
    <scope>compile</scope> 
</dependency> 
... 

現在,你來自哪裏得到這些來源可能不同。如果你只是想從IDE這樣做,就像Eclipse一樣,這可能就足夠了,因爲m2eclipse插件足夠聰明,可以知道從哪裏獲取這些源代碼(如果庫模塊也在工作區中)。如果這是您的實際構建過程,那麼您將需要修改庫模塊的pom以生成源文件以及標準的「庫文物」。所以,你既結束了:

library-artifact-0.1-SNAPSHOT.jar 

library-artifact-0.1-SNAPSHOT-sources.jar 

希望它更清楚這一點上GWT-Maven的插件收益如何。

差不多忘了,我在這裏回答的其他問題也可能有些用處:GWT Project Structure

+0

感謝您的回覆。關於我們的情況的一些額外說明:我們確實在使用Eclipse,並且目前已將我們的應用程序設置爲單個Eclipse項目。在這個項目中,我們有幾個gwt模塊構成了我們應用的不同領域。讓另一個無入口點模塊爲其他模塊繼承共享資源是有道理的。我們認爲這需要我們爲我們的應用程序建立一個新的項目,而這正是我們所描述的。但是,有沒有辦法在主項目中找到資源模塊? – mreynolds0404 2011-06-15 19:24:57

+2

啊,最初我錯過了「單一項目」的一部分。事實上,我正在描述一個單獨的項目/神器。但是,您應該可以像在其他GWT模塊之間設置繼承一樣來執行此操作。 GWT模塊A的gwt.xml,你會得到「」,其中模塊B是你的共享GWT模塊(帶有gwt.xml文件,但入口點 - 更少,如果你想)。現在,GWT編譯器很容易找到B的源代碼,因爲它們都在同一個Eclipse項目中。你有沒有嘗試在(-X)上打開Maven調試堆棧跟蹤? – Jason482 2011-06-16 19:03:14

0

我寧願對上面的答案發表評論,但我沒有足夠的代表來做到這一點。所以我在這裏發佈我的發現。

Jason482的回答爲我工作。添加:

<classifier>sources</classifier> <scope>compile</scope>

和每一個子模塊的依賴性,反應器內的POM,解決了我的問題。

mreynolds的解決方案是將GWT模塊引用添加到主pom文件的gwt-maven-plugin配置中,似乎只有在GWT子模塊中有其他入口點時才需要。我沒有,所以這一步對我來說沒有必要。