2013-09-05 9 views
8

Mam projekt nadrzędny Maven, który ma wiele modułów potomnych/modułów ... Mam następujący plik pom.xml dla głównego/nadrzędnego;Zamówienie kompilacji Mavena (wiele modułów)

<modules> 
     <module>Main-Ear</module> 
     <module>Sub-Web</module> 
     <module>Sub-Ui</module> 
     <module>Sub-Services</module> 
     <module>Sub-SSO-Login</module> 
    </modules> 

Jednak uważam, rzeczywista kolejność build być inaczej ... Po kompilacji, rzeczywista kolejność wygląda;

Main 
Sub-Services 
Sub-SSO-Login 
Sub-UI 
Sub-Web 
Main-Ear 

Gdzie dokładnie Maven bierze zamówienie na budowę w tym przypadku?

Odpowiedz

5

Maven nie wziął kolejność budowania modułów od tego, co definiujemy w głównej pom.xml. Maven decyduje o kolejności, biorąc pod uwagę zależności modułów ze sobą.

W twoim przypadku zdecydowanie Main-Ear powinien zbudować ostatni.

Rozważmy następujący przykład.

Mam moduł A, B i C. Moduł A ma zależność od modułu C i B, natomiast moduł C ma zależność od modułu . Następnie zamówienie maven budynek będzie

B 
C 
A 
+1

Więc u mówią nie byłoby jednoznaczne oświadczenie w dowolnym miejscu w pom. xml ... ale Maven podejmuje decyzję na własną .. opierając się na zależnościach .... – testndtv

+0

@testndtv Tak. Myślę (ale nie jestem pewien), czy to zależy od kolejności, którą deklarujesz, jeśli dwa podmoduły nie mają zależności między nimi. na przykładA -> C i B -> C, wtedy Maven może użyć kolejności deklaracji, aby określić, który z A lub B jest zbudowany najpierw –

+1

@AdrianShum Jeśli nie ma zależności między sobą, to maven użyje jakiejkolwiek kolejności, którą zdefiniujemy –

9

Nie można ręcznie sterować kolejnością produkcji:

z dokumentacji projektowej Maven (Guide to Working with Multiple Modules):

Reactor Sortowanie

Bo moduły w ramach budowy wielomodułowej mogą zależeć od siebie, to jest ważne tant that Reactor sortuje wszystkie projekty w sposób gwarantujący, że każdy projekt zostanie zbudowany zanim będzie potrzebny.

następujące relacje są honorowane przy sortowaniu projekty:

  • zależność projekt na innym modułem w budowie
  • deklarację plugin gdzie wtyczka jest kolejne moduły w budowie
  • zależność plugin na inny moduł w kompilacji deklaracji rozszerzenia kompilacji na innym module w kompilacji deklarowanej w elemencie (jeśli nie ma zastosowania żadna inna reguła).

Należy pamiętać, że tylko „instancja” referencje są wykorzystywane - dependencyManagement i pluginManagement elementy nie spowoduje zmianę kolejności reaktor sortowania