2009-12-30 14 views
66

En los proyectos de varios módulos en los que quiero que cada uno de los módulos tenga siempre la misma versión que el principal, normalmente he hecho algo así como lo siguiente en pom.xml del módulo:Advertencia sobre el uso de project.parent.version como la versión de un módulo en 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> 

Desde que empecé a usar Maven 3.0-alfa-5, me sale el siguiente aviso para hacerlo.

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

Tengo curiosidad por saber cuál es el verdadero problema de atar la versión de un módulo para la versión de los padres es, si las hay? O se trata de un caso de advertencia general cuando cualquier expresión, independientemente de si se trata de project.parent.version, se usa para el elemento de versión.

Respuesta

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.

Bueno, eso sería fácil de probar. Porque tenía curiosidad, sólo lo hice para usted utilizando la siguiente 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> 

Y Maven es de hecho quejan:

[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 honesto, creo que Maven es aquí, que doesn No tiene mucho sentido usar una propiedad para el elemento <version> (al menos no para project.version) y es bueno tener maven quejándose de ello.

Y si desea utilizar la versión pom padres en submódulos, acaba de quitar la etiqueta <version> de los niños poms, ellos heredarán la versión del padre. Lo que estás haciendo actualmente es inútil.

+2

Solo viendo su respuesta en negrita documentada aquí: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance. Fue mencionado de esa manera en Maven: La guía definitiva, pero pasé por alto eso en el momento en que lo leí. Gracias por la corrección. – whaley

+11

Los ejemplos en http://jira.codehaus.org/browse/MNG-4715 parecen tener algunas razones válidas para usar una propiedad para el elemento , así que no estoy convencido de que no sirva para eso, pero +1 para recordándonos que, en el caso de que desee que los submódulos utilicen la versión padre principal, simplemente elimine la etiqueta y deje que la herencia funcione. – metamatt

+1

A partir de Spring Roo 1.3.0.BUILD-SNAPSHOT si elimina la etiqueta '' de un pom hijo, comenzaría a quejarse de que 'Versión es necesaria para ...'. Pero eso es culpa de Spring Roo, no de Maven. Maven está funcionando bien sin la etiqueta de versión. –

Cuestiones relacionadas