2014-12-29 14 views
6

Mam wiele modułów w moim projekcie i są one zależne od siebie bezpośrednio lub przechodnie. Kiedy buduję "Projekt A", gdzie "Projekt D" buduje się automatycznie.Jak zbudować moduł maven z modułu nadrzędnego?

Project A > Project B > Project C > Project D 

where > means Project B depends on Project A 

«Projekt D» pom PDF do wydruku wynosi:

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

budowanie «Projekt A» automatycznie budować «Projekt B», zgodnie z moim rozumieniem tego dokonać gdzieś build-MyProjectD należy dodać jako zależność w jednym z tych projektów: Project A > Project B > Project C, ale nie znalazłem żadnego odniesienia do stringów build-MyProjectD pod poms tych projektów.

Każdy pomysł, w jaki sposób można zbudować moduł potomny (w tym przypadku «Projekt D») bez obecności dziecka artifactId w projekcie upstream?

+0

możesz użyć reaktora, który będzie zawierał wszystkie projekty jako moduły. Pomocne może być tutaj: [artykuł] (http://blog.sonatype.com/2009/10/maven-tips-and-tricks-advanced-reactor-options/). – Cuzz

Odpowiedz

13

Musisz utworzyć projekt agregatora. Zobacz the link for more information on the aggregation concept.

Zasadniczo tworzysz projekt nadrzędny zawierający kilka "modułów". Podczas budowania rodzica moduły są automatycznie budowane.

Jeśli zadeklarujesz zależności między modułami, Maven automatycznie zbuduje różne moduły we właściwej kolejności, więc jeśli «Projekt A» zależy od «Projektu B», «Projekt B» zostanie zbudowany najpierw, a następnie «Projekt A» jest zbudowany tak, że jego artefakt jest dostępny do budowy drugiego artefaktu.

Patrz także this question from the Maven's FAQ.

+0

Jeśli tylko dwa moduły i jeden moduł zależy od innego, możemy mieć moduł depebdent jako zależność. Dobrze? Tak, jeśli mamy wiele modułów, lepiej jest je przeglądać. Czyż nie? –

+0

@scottmiles Aggregation umożliwia grupowanie zestawów projektów logicznych i tworzenie ich za jednym zamachem zamiast budować je jeden po drugim. Możesz mieć zależności między tymi projektami lub nie. –

+0

@ Guillaume Polet Agreed Aggragation to jeden ze sposobów. Czy innym sposobem może być dodanie projektu podrzędnego jako zależności w module nadrzędnym, czy nie zbuduje on automatycznie projektu potomnego podczas budowania modułu nadrzędnego? –

6

W przypadku projektu nadrzędnego Maven zbuduje wszystkie moduły potomne podczas budowania projektu nadrzędnego. Dodaj moduły do ​​macierzystej pom. Zakładając A jest projekt rodzic

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

i modułów (B, C i D), dodaje projektowi jako rodzica (Jest to opcja, dzięki @Guillaume Polet)

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

Więc jeśli budować Projecta, zbuduje ProjectB, ProjectC i ProjectD. Również maven jest na tyle sprytny, aby znaleźć poprawne zamówienie na budowę dla B, C i D.

+2

Drugi krok nie jest konieczny (nazywa się dziedziczeniem). Tylko deklaracja modułów jest wymagana w rodzicu pom. –

+0

@GuillaumePolet Dzięki, nie zdawałem sobie z tego sprawy. Zaktualizowałem odpowiedź. – xyz

Powiązane problemy