2010-02-03 15 views
12

Ich möchte die Abhängigkeiten eines (Eltern) pom.xml in einem untergeordneten Projekt in Maven 2.2.1 erben; d. h., Vererbung von Projekten Es scheint, dass es notwendig ist, in diesem Fall den Standard-Verpackungstyp von jar zu pom zu ändern.Wird der Verpackungstyp 'pom' benötigt, wenn keine Projekt-Aggregation (Multimodul) verwendet wird?

Allerdings gibt the Maven2 documentation nicht an, dass der Verpackungstyp pom für Projektaggregation erforderlich ist, d. H. Multimodulprojekte, die Submodule verwenden, aber nicht für die Projektvererbung?

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

Aber wenn Sie Maven aufrufen (zB mvn clean) mit der oben beschriebenen Konfiguration, erhalten Sie eine Fehlermeldung:

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 

Auf anderen dagegen mit folgendem Eintrag:

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

Im Elternteil pom.xml kann Maven ohne Fehler ausgeführt werden.

Ist dieses Verhalten von Maven korrekt?

Antwort

10

Wie im Inheritance Abschnitt der POM Reference dokumentiert:

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

So Maven Verhalten mir richtig scheint (und die Fehlermeldung ist selbst gut zu erklären).

0

Wie von Pascal bemerkt, ist das Verhalten korrekt. Wenn Sie immer noch nach Möglichkeiten suchen, Abhängigkeiten zwischen Modulen zu teilen, können Sie in Betracht ziehen, die fraglichen Abhängigkeiten in ein Pom zu bündeln und dann Ihre Module von diesem neuen "Abhängigkeiten" -Pom abhängig zu machen.

Weitere Details finden Sie unter Maven Book Section 3.6.1.

2

Wenn Sie nur Abhängigkeiten erben wollen, dann denke ich nicht, dass es Typ "Pom" sein muss. Sie könnten es krabbeln lassen und es einfach als eine Abhängigkeit des Projekts angeben, das Sie als Kind haben. Allerdings hätten Sie dann nicht die Eltern/Kind-Beziehung, die verhindert, dass Ihr Elternprojekt ein anderer Typ als "pom" ist.

Um klar zu sein, erben Sie die Abhängigkeiten aller Ihrer Abhängigkeiten (transitive Abhängigkeiten).