instalar - Actualización de los números de versión de los módulos en un proyecto de varios módulos de Maven
maven tutorial (7)
Tengo un proyecto de varios módulos maven. Pretendemos versionar todos estos módulos juntos. Pero a partir de ahora estoy terminando la versión de codificación rígida 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>
Es posible que desee consultar el lanzamiento del complemento de la release:update-versions Maven release:update-versions objetivo de las release:update-versions . Se actualizará la versión de los padres, así como todos los módulos debajo de ella.
Actualización: tenga en cuenta que lo anterior es el complemento de lanzamiento. Si no está liberando, puede usar versions:set
mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
La mejor manera es que, dado que tiene la intención de agrupar sus módulos, puede especificar la etiqueta <dependencyManagement>
en la mayoría de los pom.xml
externos (módulo principal) directamente en la etiqueta <project>
. Controla la versión y el nombre del grupo. En su módulo individual, solo necesita especificar la etiqueta <artifactId>
en su pom.xml
. Tomará la versión del archivo principal.
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:
Algunos proyectos pueden ser una agregación de módulos, pero no tienen una relación padre-hijo entre el POM agregador y los módulos agregados. (Es posible que no haya ninguna relación entre padres e hijos, o que los módulos hijos usen un POM por 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 usar el Complemento de Versions Maven para actualizar no solo el POM agregador sino también todos los módulos agregados; Es la opción processAllModules
. El siguiente comando debe realizarse en el directorio del proyecto agregador:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules
El complemento de 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 olvide confirmar los cambios en todos los módulos, lo que también puede hacer con el mismo interruptor:
mvn versions:commit -DprocessAllModules
Puede decidir prescindir de los POMS de copia de seguridad y hacer todo en un solo comando:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
Le animo a leer el Libro de Maven sobre compilaciones de múltiples módulos (reactor).
Quise decir en particular lo siguiente:
<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>
debe ser cambiado en Aquí tenga cuidado con la versión no definida solo en la parte padre que está definida.
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
Este es un mejor enlace .
Si desea automatizar completamente el proceso (es decir, desea incrementar el número de versión sin tener que saber cuál es el número de versión actual), puede hacer esto:
mvn build-helper:parse-version versions:set -DnewVersion=/${parsedVersion.majorVersion}./${parsedVersion.minorVersion}./${parsedVersion.nextIncrementalVersion} versions:commit
Utilizar versions:set
desde el complemento versiones-maven :
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
Ajustará todas las versiones de pom, las versiones principales y las 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 contento con los resultados.
Nota: esta solución supone que todos los módulos también usan el pom agregado como pom principal, un escenario que se consideró estándar en el momento de esta respuesta. Si ese no es el caso, ve por la respuesta de Garret Wilson .
versions:update-child-modules
suena como lo que estás buscando. Podría hacer versiones: establecer como se mencionó, pero esta es una manera liviana de actualizar los números de las versiones principales. Para los módulos secundarios, opino que debería eliminar las definiciones <version>
, ya que heredarán el número de versión del módulo principal.