maven-2 properties substitution pom.xml

maven 2 - Maven: la sustitución de propiedades no se ha hecho para/project/version tag of pom?



maven-2 properties (1)

http://maven.apache.org/pom.html#Properties dice que los valores de las propiedades son accesibles en cualquier lugar dentro de una POM ".

¿Debería esta lectura "son accesibles en la mayoría de los lugares dentro de un POM"?

Puedo especificar la versión de una dependencia no hay problema así:

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency>

Pero ¿qué pasa con la versión del proyecto en sí?

<project xmlns="http://maven.apache.org/POM/4.0.0" ...> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>${myversion}</version> <properties> <myversion>8</myversion> </properties> <modules> <module>alpha</module> <module>beta</module> </modules> ...

Si intento esto, <version> no tomará el valor 8. Aquí he definido $ {myversion} en el pom, pero parece ser lo mismo si especifico -Dmyversion = 8 en la línea de comandos.

Si uno de los módulos especifica su padre con un número de versión codificado como:

<parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>8</version> </parent>

Cuando intento construir, luego, cuando Maven viene a ver el pom del módulo, dirá que no puede encontrar el pom principal dado con la versión 8.

Sin embargo, si yo también codifico la versión en el padre a 8, en lugar de usar $ {myversion}, entonces todo funciona bien.

Así que me parece que la sustitución de propiedades no ocurre para la etiqueta / project / version del pom principal.

¿Es este el caso o hay alguna otra explicación para lo que parece estar viendo?

Saludos,

/Jorge


La sustitución de propiedad no está permitida en /project/parent/(groupId|artifactId|version) o en /project/(groupId|artifactId|version) por diseño en Maven 2.x.

Así que las reglas son:

  • codifique la versión en el elemento superior del project/version .
  • codifique la versión en el elemento project/parent/version de children.
  • Los niños heredan la versión a menos que quieran anularla.
    • por lo tanto no hay necesidad de una propiedad ${myversion}
  • use ${project.groupId} y ${project.version} para las dependencias entre módulos.

Encontrará un número infinito de hilos en este tema en la lista de usuarios de Maven (consulte, por ejemplo, las Propiedades de la versión de Pom Parent ) y diré que cualquier intento de solucionar las reglas anteriores es incorrecto y no funciona.

Se permitirá la versión menos parent en Maven 3.1.

Ver también