2012-11-14 48 views
4

我有一個項目,我所有的項目都這樣定義一個父POM:Maven構建都是爲了

<parent> 
    <groupId>MyProject</groupId> 
    <artifactId>MyApp</artifactId> 
    <version>1.0</version> 
</parent> 

然而,這個父POM沒有指定的模塊元素的模塊。

所以當我運行mvn install -f parent/pom.xml命令它什麼都不做。

是否有一些其他的方式我可以建立整個項目在訂購這樣所有的poms都建? 「按順序」我的意思是「建立在依賴性的順序」。由於多個項目依賴於其他項目,因此我們不能僅按字母順序構建每個項目。

+1

爲什麼你沒有在父pom中指定模塊?請在您的父母郵件中指定,並且所有內容都將按順序排列 –

+0

如果這是唯一方法,請繼續並將此評論移至答案框。 –

回答

13

如果你有反應器POM(與<modules>元件的聚甲醛,和<packaging>定義爲pom),則模塊將被建在依賴性順序。無論在pom中指定模塊的順序如何,此順序都會發生。

有幾個方法可以解決這個:

選項1個

你的反應堆POM並不需要是相同的pom作爲父POM。所以,你可以有:

project/pom.xml   # Reactor pom with <modules> element 
project/parent/pom.xml # Parent pom 
project/module-a/pom.xml # Some module 'a' 
project/module-b/pom.xml # Some module 'b' 

在這種情況下,反應堆POM包含:

<modules> 
    <module>parent</module> 
    <module>module-a</module> 
    <module>module-b</module> 
</modules> 

在頂層運行mvn install將建立你的父POM,並按照相關性順序的兩個模塊。

選項2

移動你的父POM一個目錄,並把它作爲既是父POM和反應器POM,讓你的項目看起來像這樣

project/pom.xml   # Parent/Reactor pom with <modules> element 
project/module-a/pom.xml # Some module 'a' 
project/module-b/pom.xml # Some module 'b' 

中的模塊部分它看起來像這樣

<modules> 
    <module>module-a</module> 
    <module>module-b</module> 
</modules> 

同樣,在頂層運行mvn install將建立你的父POM ,以及依賴順序的兩個模塊。

選項3

留下你的父POM它在哪裏,並添加一個模塊部分:

<modules> 
    <module>../module-a</module> 
    <module>../module-b</module> 
</modules> 

在這種情況下,MVN運行安裝-f父/ pom.xml中將建父pom,以及依賴順序的兩個模塊。

結論

我通常使用選項2.這是最Maven中自身使用的模式,我會盡量避免誤入從「因循守舊」,這被廣泛理解和測試太遠。請參閱Guide to Working with Multiple Modules

+0

這是一個很好的答案。他演示如何使用' ../模塊-al'的部分是我真正需要幫助的部分。 –

1

沒有其他方法可以在構建過程中自動解決項目之間的依賴關係。

您可以解決的依賴關係是指定構建需要完成的順序。在你的父POM上創建一個模塊部分來完成。

<modules> 
     <module>Proj A to Build/module> 
     <module>Proj B dependent or Proj A</module> 
    </modules>