Aviso sobre o uso do Project.Parent.version como a versão de um módulo no Maven 3
Pergunta
Nos projetos Multi-Module, do Maven, onde quero que cada um dos módulos sempre mantenha a mesma versão que o pai, normalmente fiz algo como o seguinte no POM.xml do módulo:
<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>
Desde que comecei a usar o Maven 3.0-Alpha-5, recebo o seguinte aviso para fazê-lo.
[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]
Estou curioso para saber qual é o verdadeiro problema de amarrar a versão de um módulo à versão pai, se houver? Ou isso é um caso de um aviso geral quando qualquer expressão, independentemente de ser project.parent.version, é usada para o elemento de versão.
Solução
Estou curioso para saber qual é o verdadeiro problema de amarrar a versão de um módulo à versão pai, se houver? Ou isso é um caso de um aviso geral quando qualquer expressão, independentemente de ser project.parent.version, é usada para o elemento de versão.
Bem, isso seria fácil de testar. Porque eu estava curioso, acabei de fazer isso por você usando o seguinte POM:
<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>
E Maven está realmente reclamando:
[WARNING] 'version' contains an expression but should be a constant. @ com.mycompany:module:${myversion}, /home/pascal/Projects/maven-maven3-testcase/module/pom.xml
Para ser sincero, acho que o maven está bem aqui, não faz muito sentido usar uma propriedade para o <version>
elemento (pelo menos não para o Project.version) e é bom ter maven reclamando disso.
E se você quiser usar a versão pai POM em sub-módulos, basta remover o <version>
Tag dos POMs infantis, eles herdarão a versão do pai. O que você está fazendo atualmente é desnecessário.