2014-12-29 98 views
6

我在我的項目中有多個模塊,它們直接或間接地相互依賴。 當我創建«項目A»一些«項目D»自動構建。如何使父模塊的子模塊maven構建?

Project A > Project B > Project C > Project D 

where > means Project B depends on Project A 

«項目d»POM snipeet是:

<project xmlns="..."> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myProduct</groupId> 
    <artifactId>build-MyProjectD</artifactId> 
    <name>MyProjectD</name> 
    ........ 
</project> 

由於建築«項目A»自動構建«項目B»,按我的理解,使這個地方發生build-MyProjectD應該作爲依賴在這些項目Project A > Project B > Project C之一,但我沒有找到這些項目的poms下字符串build-MyProjectD的任何參考。

任何想法如何有沒有其他方式來建立子模塊(在這種情況下«項目D»)沒有子項artifactId存在上游項目?

+0

您可以使用包含所有項目作爲模塊的reactor。這 [文章](http://blog.sonatype.com/2009/10/maven-tips-and-tricks-advanced-reactor-options/)可能會有所幫助。 – Cuzz

回答

13

您需要創建一個聚合器項目。見the link for more information on the aggregation concept

基本上,您創建了一個包含多個「模塊」的父項目。構建父代時,模塊也會自動生成。

如果你聲明模塊之間的依賴關係,Maven會自動建立不同的模塊,使得如果«項目A»依賴於«項目B»,«項目B»首先被構建,然後«項目A»是爲了使其神器可用於構建第二件神器而建造的。

另請參閱this question from the Maven's FAQ

+0

如果我們只有兩個模塊和一個模塊依賴於另一個模塊,那麼我們可以將depebdent模塊作爲依賴項。對? 是的,如果我們有多個模塊,最好去聚合。不是嗎? –

+0

@scottmiles Aggregation允許您將一組邏輯項目組合在一起,並讓它們一次構建而不必逐個構建它們。你可以在這些項目之間有依賴關係,或者不能。 –

+0

@ Guillaume Polet同意加重是一種方式。另一種方式是在父模塊中添加子項目作爲依賴項,當我們構建父模塊時,是不是會自動生成所有的子項目 ? –

6

對於父項目Maven將在構建父項目時構建所有子模塊。 將模塊添加到您的父pom。假設A是你的父項目

<modules> 
    <module>projectB</module> 
    <module>projectC</module> 
    <module>projectD</module> 
    </modules> 

,並在模塊(B,C和d),添加項目A作爲父(這是可選的,感謝@Guillaume Polet

<parent> 
    <groupId>foo.bar</groupId> 
    <artifactId>ProjectA</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

所以,如果你建立了projectA,它將建立ProjectB,ProjectC和ProjectD。另外,maven足夠聰明,能夠爲B,C和D找出正確的構建順序。

+2

第二步不是必須的(它被稱爲繼承)。父pom只需要聲明模塊。 –

+0

@GuillaumePolet謝謝,沒有意識到。我已經更新了答案。 – xyz