Actualización de los números de versión de los módulos en un proyecto Maven de módulos múltiples


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 la versión de codificación en cada uno de los módulos pom.xml como abajo

<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 padre 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>
 229
Author: messivanio, 2011-04-20

7 answers

Uso versions:set desde las versiones - maven plugin :

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

Ajustará todas las versiones pom, versiones padre y versiones de dependencias en un proyecto de módulos múltiples.

Si cometiste un error, haz

mvn versions:revert

Después, o

mvn versions:commit

Si estás satisfecho con los resultados.


Nota: esta solución asume que todos los módulos utilizan el pom agregado como pom padre también, un escenario que se consideraba estándar en el momento de esta respuesta. Si eso no es el caso, vaya a La respuesta de Garret Wilson .

 446
Author: Sean Patrick Floyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 00:24:28

Es posible que desee mirar en Maven release plugin release:update-versions objetivo. Actualizará la versión del padre, así como todos los módulos bajo él.


Actualización: Tenga en cuenta que lo anterior es el complemento de liberación. Si no está liberando, es posible que desee utilizar versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
 20
Author: Nishant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-26 07:32:30

La respuesta dada asume 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 tienen una relación padre-hijo entre el agregador POM y los módulos agregados. (Puede no haber ninguna relación padre-hijo en absoluto, o los módulos secundarios pueden usar un POM separado como el "padre".) En estas situaciones la respuesta dada no funcionará.

Después de mucha lectura y experimentación, resulta que hay una manera de usar las Versiones Maven Plugin para actualizar no solo el agregador POM 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

Las versiones Maven Plugin no solo actualizará el versiones de todos los módulos contenidos, también actualizará las dependencias entre módulos!!!! Esta es una gran victoria y 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 respaldo por completo y hacer todo en un solo comando:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
 13
Author: Garret Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 00:11:03

Les animo a leer el Libro de Maven sobre compilaciones de módulos múltiples (reactores).

Me refería en particular a 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 cambiarse por. Aquí tenga cuidado con la versión no definida solo en la parte padre se define.

<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.

 11
Author: khmarbaise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-03 16:06:42

versions:update-child-modules suena como lo que estás buscando. Podría hacer versiones: establecer como se mencionó, pero esta es una forma ligera de actualizar los números de versión padre. Para los módulos hijos, es mi opinión que debería eliminar las definiciones <version>, ya que heredarán el número de versión del módulo padre.

 4
Author: Jon Onstott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-25 13:57:00

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
 2
Author: Crummy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-19 08:54:31

La mejor manera es, ya que tiene la intención de agrupar sus módulos, puede especificar la etiqueta <dependencyManagement> en la mayoría externa pom.xml (módulo principal) directamente bajo 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 padre.

 1
Author: murali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-27 07:17:20