2010-02-03 4 views
12

Je souhaite hériter des dépendances d'un (parent) pom.xml dans un projet enfant dans Maven 2.2.1; c'est-à-dire utiliser l'héritage du projet. Il semble qu'il est nécessaire de changer le type d'emballage par défaut de jar à pom dans ce cas. Cependant, the Maven2 documentation n'indique-t-il pas que le type d'emballage pom est nécessaire pour l'agrégation de projet, c'est-à-dire des projets multimodules qui utilisent des sous-modules, mais pas pour l'héritage de projet?Le type d'emballage 'pom' est-il nécessaire lorsque vous n'utilisez pas l'agrégation de projet (multimodule)?

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

Mais si vous appelez Maven (par exemple mvn clean) avec la configuration ci-dessus, vous obtenez une erreur:

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'autre autre part, avec l'entrée suivante:

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

dans le parent pom.xml, Maven peut être exécuté sans aucune erreur.

Est-ce que ce comportement de Maven est correct?

Répondre

10

Comme indiqué dans la section Inheritance du POM Reference:

The packaging type required to be pom for parent and aggregation (multi-module) projects.

comportement de Maven me semble donc correct (et le message d'erreur est bien auto expliquer).

0

Comme noté par Pascal, le comportement est correct. Si vous êtes toujours à la recherche de moyens de partager des dépendances entre modules, vous pouvez envisager de regrouper les dépendances en question dans un pom, puis de faire dépendre vos deux modules de ce nouveau pom "dependencies".

Voir Maven Book Section 3.6.1 pour plus de détails.

2

Si vous voulez simplement hériter des dépendances, je ne pense pas que ce soit un type 'pom'. Vous pourriez avoir jar et simplement le spécifier comme une dépendance du projet que vous avez comme enfant. Cependant, vous n'auriez alors pas la relation parent/enfant qui empêche votre projet parent d'être un type autre que 'pom'. Pour être clair, vous héritez des dépendances de toutes vos dépendances (dépendances transitives).

Questions connexes