En los proyectos de múltiples módulos de maven donde quiero que cada uno de los módulos mantenga siempre la misma versión que el padre, normalmente he hecho algo como lo siguiente en el pom.xml del 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 comencé a usar maven 3.0-alpha-5, recibo la siguiente advertencia al 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 problema real de vincular la versión de un módulo a la versión principal, si corresponde. ¿O se trata de un caso de advertencia general cuando se usa cualquier expresión, independientemente de si es project.parent.version, para el elemento de versión?
Podría llegar tarde para discutir sobre esto. Tengo una solución simple para esto
WARNING
.En primer lugar, si desea que todos los módulos secundarios tengan la misma versión que los padres, simplemente elimine la
<version>
etiqueta del POM secundario y, como lo incluye<parent>
en el POM secundario, debería estar allí.En ausencia de
<version>
un POM secundario, tomará automáticamente el POM principalversion
.Ahora, si desea usar
property
en la versión principal de POM y desea obtener lo mismo en todos los módulos secundarios, puede realizar lo siguiente.No hay limitación en el uso de la propiedad en
<version>
parte del POM padre o hijo. Pero si usa su propia etiqueta xml para especificar eso o usa su propia propiedad, entoncesWARNING
viene, (aunque esto es solo una advertencia, todo funciona como se esperaba).Pero si desea deshacerse de esto
WARNING
, puede seguir estos pasos:Cree
<properties>
dentro de POM.xml como se muestra a continuación<properties> <revision>1.0.0</revision> <!-- Put your version --> </properties>
En
<version>
el POM.xml, ponga lo siguiente<version>${revision}</version>
Fragmento de código de muestra (para proyectos de varios módulos):
<groupId>abc.xyz</groupId> <artifactId>pqr</artifactId> <!-- <version>1.0.0</version> --> <version>${revision}</version> <packaging>pom</packaging> <description>Parent POM</description> <properties> <revision>1.0.0</revision> </properties>
Nota : En lugar de
<revision>
, si usa cualquier otro nombre (por ejemplo,<my.version>
), enfrentará eseWARNING
Ahora, si desea pasar la versión durante
mvn deploy
, puede usarmvn deploy "-Drevision=1.0.0-SNAPSHOT"
y de manera similarmvn install
también.Ahora, si la configuración anterior, desea usar como POM principal y desea usar la misma
version
en todos los módulos secundarios, eso también se puede hacer. En cada unochild module POM
, use a continuación<parent> <groupId>abc.xyz</groupId> <artifactId>Parent</artifactId> <!-- <version>1.0.0</version> --> <version>${revision}</version> </parent> <groupId>abc.xyz</groupId> <artifactId>Child</artifactId> <!-- <version>1.0.0</version> --> <!-- Automatically inherit parent POM version --> <name>Demo</name>
Como referencia, puede pasar por la configuración de múltiples módulos de maven
fuente