2009-12-30 8 views
66

In Maven Multi-Module-Projekte, wo ich möchte, dass jedes der Module immer die gleiche Version wie die Eltern, habe ich in der Regel etwas getan folgendes ist in der pom.xml des Moduls:Warnung für die Verwendung von project.parent.version als die Version eines Moduls in Maven 3

<parent> 
    <groupId>com.groupId</groupId> 
    <artifactId>parentArtifactId</artifactId> 
    <version>1.1-SNAPSHOT</version> 
    </parent> 

    <groupId>com.groupId</groupId> 
    <artifactId>artifactId</artifactId> 
    <packaging>jar</packaging> 
    <version>${project.parent.version}</version> 
    <name>name</name> 

Da ich mit maven 3.0-alpha-5 gestartet, erhalte ich die folgende Warnung dafür.

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.groupid.artifactId:name:jar:1.1-SNAPSHOT 
[WARNING] 'version' contains an expression but should be a constant. @ com.groupid.artifactId:name::${project.parent.version}, /Users/whaley/path/to/project/child/pom.xml 
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. 
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects. 
[WARNING] 

Ich bin neugierig zu wissen, was das eigentliche Problem eines Moduls Version auf die Parent-Version mit binden ist, wenn überhaupt? Oder ist dies eine allgemeine Warnung, wenn ein Ausdruck, unabhängig davon, ob es sich um project.parent.version handelt, für das Versionselement verwendet wird?

Antwort

77

I'm curious to know what the real problem with tying a module's version to the parent version is, if any? Or is this a case of a general warning when any expression, regardless of whether it's project.parent.version, is used for the version element.

Nun, das wäre einfach zu testen. Weil ich neugierig war, ich habe es nur für Sie folgende pom mit:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <artifactId>parent</artifactId> 
    <groupId>com.mycompany</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <groupId>com.mycompany</groupId> 
    <artifactId>module</artifactId> 
    <version>${myversion}</version> 
    <name>module</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <myversion>1.0-SNAPSHOT</myversion> 
    </properties> 
    ... 
</project> 

Und Maven tatsächlich beschwert:

[WARNING] 'version' contains an expression but should be a constant. @ com.mycompany:module:${myversion}, /home/pascal/Projects/maven-maven3-testcase/module/pom.xml 

Um ehrlich zu sein, ich denke, dass Maven ist hier richtig, es doesn Es macht keinen Sinn, eine Eigenschaft für das <version> Element zu verwenden (zumindest nicht für project.version) und es ist schön, wenn Maven sich darüber beschwert.

Und wenn Sie die übergeordnete pom Version in Untermodule verwenden mögen, entfernen Sie einfach den <version> Tag aus dem Kind Poms, werden sie die Version von den übergeordneten erben. Was Sie gerade tun, ist einfach nutzlos.

+2

Sehen Sie sich Ihre fettgedruckte Antwort hier an: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance. So wurde es in Maven erwähnt: The Definitive guide, aber ich habe das zu der Zeit, als ich es gelesen habe, beschönigt. Danke für die Korrektur. – whaley

+11

Die Beispiele in http://jira.codehaus.org/browse/MNG-4715 scheinen einige gültige Gründe für die Verwendung einer Eigenschaft für das Element zu haben, also bin ich nicht davon überzeugt, dass es keinen Nutzen dafür gibt, sondern +1 für Erinnern Sie uns daran, dass Sie, wenn Sie wollen, dass Submodule die Eltern-Pom-Version verwenden, einfach das Tag entfernen und die Vererbung zulassen. – metamatt

+1

Ab Frühling Roo 1.3.0.BUILD-SNAPSHOT wenn Sie den '' -Tag von einem Kind Pom entfernen, würde es anfangen zu beschweren, dass 'Version für ... erforderlich ist. Aber das ist Spring Roos Schuld, nicht Mavens. Maven funktioniert ohne das Versions-Tag gut. –