2011-09-21 16 views
6

Jestem nowy w Maven i próbuję zrozumieć, dlaczego moduły mojej firmy są zorganizowane w "grupy modułów", ale także każdy podmoduł wyraźnie deklaruje rodzica. Nie bardzo rozumiem, co POM próbuje powiedzieć o difference between inheritance and aggregation.Apache Maven: Jaka jest różnica między Dziedziczeniem, Agregacją i Zależnościami?

Na przykład, moduł nadrzędny:

<groupId>example.group</groupId> 
<artifactId>util</artifactId> 
<packaging>pom</packaging> 
<name>Util Parent</name> 

<modules> 
    <module>util_client</module> 
    <module>util_core</module> 
    <module>util_server</module> 
</modules> 

a jednym z jej dzieci:

<parent> 
    <artifactId>util</artifactId> 
    <groupId>example.group</groupId> 
    <version>trunk-SNAPSHOT</version> 
</parent> 

<groupId>example.group.util</groupId> 
<artifactId>util_core</artifactId> 
<packaging>jar</packaging> 
<name>Util Core</name> 

Dlaczego zadeklarować to w obie strony? Czy jest zbędny? Aby sprawę jeszcze bardziej skomplikować, niektóre util submodułów zależą od siebie nawzajem:

<groupId>example.group.util</groupId> 
<artifactId>util_client</artifactId> 
<packaging>jar</packaging> 
<name>Util Client</name> 

<dependencies> 
    <dependency> 
     <groupId>example.group.util</groupId> 
     <artifactId>util_core</artifactId> 
    </dependency> 
</dependencies> 

Przepraszam, jeśli jest to doozy z pytaniem, ale wow to jest mylące! Dzięki za pomoc.

Odpowiedz

9

Po zdefiniowaniu podmodułów można budować i wydawać je wszystkie naraz z poziomu najwyższego poziomu.

Podczas korzystania z dziedziczenia w drugim przykładzie, można użyć definicji z POM macierzystego zdefiniowanej raz (Like które wersje oprogramowania do wykorzystania)

W ostatnim przykładzie, gdy jeden moduł potrzebuje środków z innego modułu możesz dodać go jako zależność, a następnie pobierze i automatycznie umieści go w ścieżce budowania.

+0

Dlaczego więc nie chciałbym podać 'util_core' jako podmodułu' util_client'? Czy 'util_client' nadal będzie się kompilował? –

+0

Nie będzie się kompilował, dopóki 'util_core' nie zostanie zainstalowany' mvn install' Jeśli zrobisz to z poziomu najwyższego, skompiluje je wszystkie w kolejności. –

Powiązane problemy