2011-09-21 9 views
6

Sono nuovo di Maven e sto cercando di capire perché i moduli della mia azienda sono organizzati in "gruppi di moduli", ma anche ciascun sottomodulo dichiara esplicitamente il suo genitore. Non capisco bene cosa stia cercando di dire il riferimento POM riguardo allo difference between inheritance and aggregation.Apache Maven: Qual è la differenza tra Ereditarietà, Aggregazione e Dipendenze?

Ad esempio, un modulo di genitore:

<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> 

e uno dei suoi figli:

<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> 

Perché dichiarano entrambe le cose? È ridondante? Per rendere le cose ancora più confuse, alcuni dei sottomoduli util dipendono vicenda:

<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> 

Scusate se questo è un doozy di una domanda, ma wow questo è confusa! Grazie per l'aiuto.

risposta

9

Quando si definiscono i sottomoduli, è possibile creare e rilasciarli tutti contemporaneamente dal livello superiore.

Quando si utilizza l'ereditarietà nel secondo esempio, è possibile utilizzare le definizioni dalla POM genitore definito una volta, (come quali versioni del software da utilizzare)

Nell'ultimo esempio, quando un modulo ha bisogno di risorse da un altro modulo , è possibile aggiungerlo come dipendenza e verrà scaricato e incluso automaticamente nel percorso di generazione.

+0

Quindi, perché esattamente non desidero specificare 'util_core' come sottomodulo di' util_client'? 'Util_client' sarebbe ancora compilato? –

+0

Non verrà compilato fino a quando 'util_core' è stato installato' mvn install' Se lo si fa dal livello più alto, lo compilerà tutto in ordine. –

Problemi correlati