Actualización de números de versión de módulos en un proyecto Maven de varios módulos
Tengo un proyecto Maven de varios módulos. Tenemos la intención de versionar todos estos módulos juntos. Pero a partir de ahora estoy terminando codificando la versión en cada uno de los módulos pom.xml como se muestra a continuación.
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>
y el módulo principal principal tiene la siguiente configuración
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
Úselo versions:set
desde el complemento de versiones-maven :
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
Ajustará todas las versiones de pom, versiones principales y versiones de dependencia en un proyecto de varios módulos.
Si cometiste un error, hazlo.
mvn versions:revert
después, o
mvn versions:commit
si estás satisfecho con los resultados.
Nota: esta solución supone que todos los módulos utilizan el pom agregado como pom principal también, un escenario que se consideraba estándar en el momento de esta respuesta. Si ese no es el caso, busque la respuesta de Garret Wilson .
La respuesta dada supone que el proyecto en cuestión utiliza la herencia del proyecto además de la agregación de módulos. De hecho, esos son conceptos distintos:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
Algunos proyectos pueden ser una agregación de módulos, pero no tener una relación padre-hijo entre el agregador POM y los módulos agregados. (Es posible que no exista ninguna relación padre-hijo, o que los módulos secundarios puedan usar un POM completamente separado como "padre"). En estas situaciones, la respuesta dada no funcionará.
Después de mucha lectura y experimentación, resulta que hay una manera de utilizar el complemento Versions Maven para actualizar no solo el POM del agregador sino también todos los módulos agregados; es la processAllModules
opción. El siguiente comando debe realizarse en el directorio del proyecto agregador:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules
El complemento Versions Maven no solo actualizará las versiones de todos los módulos contenidos, sino que también actualizará las dependencias entre módulos. Esta es una gran victoria, ahorrará mucho tiempo y evitará todo tipo de problemas.
Por supuesto, no olvides confirmar los cambios en todos los módulos, lo que también puedes hacer con el mismo modificador:
mvn versions:commit -DprocessAllModules
Puede decidir prescindir por completo del POMS de respaldo y hacer todo con un solo comando:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false