Il tipo di imballaggio è necessario "POM" quando non si utilizza l'aggregazione del progetto (multimodulo)?

StackOverflow https://stackoverflow.com/questions/2193789

Domanda

Voglio ereditare le dipendenze di un (genitore) pom.xml in un progetto per bambini a Maven 2.2.1; cioè utilizzare l'eredità del progetto. Sembra che sia necessario modificare il tipo di imballaggio predefinito jar a pom in questo caso.

Tuttavia, no La documentazione Maven2 Dichiarare che il tipo di imballaggio pom È necessario per l'aggregazione del progetto, IE MultiModule progetti che utilizzano sottomoduli, ma non per l'eredità del progetto?

<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId>
 <artifactId>example-parent</artifactId>
 <version>1</version>

 <dependencies>
   <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.14</version>
   </dependency>
 </dependencies>
</project>

<project>     
 <parent>
   <groupId>example</groupId>
   <artifactId>example-parent</artifactId>
   <version>1</version>
 </parent>

 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId> 
 <artifactId>example-child</artifactId>
</project>

Ma se chiami Maven (ad es. mvn clean) Con la configurazione sopra, si ottiene un errore:

Project ID: example:example-child

Reason: Parent: example:example-parent:jar:1 
 of project: example:example-child has wrong packaging: jar.
Must be 'pom'. for project example:example-child

D'altra parte, con la seguente voce:

<project> 
 ... 
 <packaging>pom</packaging>
 ... 
</project>

nel genitore pom.xml, Maven può essere eseguito senza alcun errore.

Questo comportamento di Maven è corretto?

È stato utile?

Soluzione

Come documentato nel Eredità sezione del Riferimento POM:

Il tipo di imballaggio richiesto per essere pom per genitore e aggregazione (Progetti multi-modulo).

Quindi il comportamento di Maven mi sembra corretto (e il messaggio di errore è ben spiegato).

Altri suggerimenti

Se vuoi solo ereditare le dipendenze, non credo che debba essere un tipo "pom". Potresti averlo un barattolo e semplicemente specificarlo come una dipendenza del progetto che hai da bambino. Tuttavia, non avresti quindi la relazione genitore/figlio che è ciò che impedisce al progetto genitore di essere un tipo diverso da "pom".

Per essere chiari, erediti le dipendenze di tutte le tue dipendenze (dipendenze transitive).

Come notato da Pascal, il comportamento è corretto.

Se stai ancora cercando mezzi per condividere dipendenze tra i moduli, puoi considerare di raggruppare le dipendenze in questione in un POM e quindi avere i moduli dipendono entrambi da quelle nuove "dipendenze" POM.

Vedere Maven Book Sezione 3.6.1 per ulteriori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top