webentwicklung-frage-antwort-db.com.de

Warnung zur Verwendung von project.parent.version als Version eines Moduls in Maven 3

In Maven-Multimodulprojekten, in denen jedes Modul immer die gleiche Version wie das übergeordnete Modul haben soll, habe ich in der pom.xml des Moduls normalerweise Folgendes ausgeführt:

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

Seit ich maven 3.0-alpha-5 benutze, bekomme ich die folgende Warnung dazu.

[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, was das eigentliche Problem beim Binden der Version eines Moduls an die übergeordnete Version ist, falls vorhanden. Oder handelt es sich um eine allgemeine Warnung, wenn für das version-Element ein Ausdruck verwendet wird, unabhängig davon, ob es sich um project.parent.version handelt.

76
whaley

Ich bin neugierig, was das eigentliche Problem beim Binden der Version eines Moduls an die übergeordnete Version ist, falls vorhanden. Oder handelt es sich um eine allgemeine Warnung, wenn für das version-Element ein Ausdruck verwendet wird, unabhängig davon, ob es sich um project.parent.version handelt.

Nun, das wäre einfach zu testen. Weil ich neugierig war, habe ich es nur mit dem folgenden Pom für dich gemacht:

<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 beschwert sich tatsächlich:

[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, denke ich, dass maven genau hier ist. Es macht wenig Sinn, eine Eigenschaft für das Element <version> Zu verwenden (zumindest nicht für project.version), und es ist schön, wenn sich maven darüber beschwert .

Und wenn Sie die übergeordnete POM-Version in Submodulen verwenden möchten, entfernen Sie einfach das <version> - Tag von den untergeordneten POMs, werden sie die Version von den übergeordneten POMs erben. Was Sie gerade tun, ist unnötig.

89
Pascal Thivent