Предупреждение об использовании project.parent.version в качестве версии модуля в Maven 3

В мультимодульных проектах maven, где я хочу, чтобы каждый из модулей всегда сохранял ту же версию, что и родительский, я обычно делал что-то вроде следующего в модуле pom.xml:

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

Поскольку я начал использовать maven 3.0-alpha-5, для этого я получил следующее предупреждение.

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

Мне любопытно узнать, какова реальная проблема с привязкой версии модуля к родительской версии, если таковая имеется? Или это случай общего предупреждения, когда для элемента версии используется любое выражение, независимо от того, является ли оно project.parent.version.

Ответ 1

Мне любопытно узнать, какова реальная проблема с привязкой версии модуля к родительской версии, если таковая имеется? Или это случай общего предупреждения, когда для элемента версии используется любое выражение, независимо от того, используется ли оно project.parent.version.

Ну, это было бы легко проверить. Поскольку мне было любопытно, я просто сделал это для вас, используя следующий помп:

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

И мавен действительно жалуется

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

Если честно, я думаю, что maven здесь, не имеет особого смысла использовать свойство для элемента <version> (по крайней мере, для project.version), и приятно, что maven жалуется на это.

И если вы хотите использовать версию родительского pom в подмодулях, просто удалите <version> из дочерних poms, они унаследуют версию от родительского. То, что вы сейчас делаете, не нужно.