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

9 minutos de lectura

avatar de usuario
sandeepkunkunuru

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

  • Su pregunta está mal formulada y confunde a las personas que tienen verdaderos POM de varios módulos (“agregados”). A partir de su ejemplo y de las respuestas, parece que realmente está hablando de un POM principal, no de un POM agregado de varios módulos. Ver maven.apache.org/pom.html#Aggregation .

    – Garret Wilson

    16 dic 2016 a las 17:05


avatar de usuario
sean patrick floyd

Usar versions:set desde el Complemento de versiones-maven:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

Ajustará todas las versiones 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á satisfecho con los resultados.


Nota: esta solución asume que todos los módulos usan el pom agregado como pom principal también, un escenario que se consideró estándar en el momento de esta respuesta. Si ese no es el caso, busque la respuesta de Garret Wilson.

  • Hubiera sido genial si hubiera una solución que no requiere que cambies cada módulo. La única alternativa que se me ocurre es usar siempre una versión instantánea para el parent-pom.

    – AmanicA

    2 de julio de 2011 a las 21:49

  • Adicionalmente a la versions:set uno puede especificar -DgenerateBackupPoms=falseya que, de forma predeterminada, este complemento realiza una copia de seguridad de los archivos pom originales.

    – Maksim Sorokin

    15 de noviembre de 2012 a las 8:49

  • Ese es el punto de la versions:commit : “Elimina la copia de seguridad inicial del pom, aceptando así los cambios”.

    –Michael Laffargue

    28 de abril de 2014 a las 9:52

  • Un nuevo complemento resuelve el problema descrito en esta pregunta de manera diferente: mojo.codehaus.org/flatten-maven-plugin/examples/…

    – Stephan

    12 de junio de 2014 a las 14:51

  • @MichaelLaffargue mvn versions:commit parece eliminar los archivos de copia de seguridad generados del pom.xml anterior

    – Cris Rockwell

    30 de agosto de 2015 a las 17:39

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 tener una relación padre-hijo entre el agregador POM y los módulos agregados. (Es posible que no haya una relación padre-hijo en absoluto, o los módulos secundarios pueden usar un POM separado por completo 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 el Versiones Complemento Maven actualizar no solo el POM del agregador sino también todos los módulos agregados; es el processAllModules opción. El siguiente comando debe hacerse en el directorio del proyecto agregador:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules

¡El complemento Versiones 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 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 modificador:

mvn versions:commit -DprocessAllModules

Puede decidir prescindir por completo del POMS de respaldo y hacer todo en un solo comando:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false

  • ¿Cómo automatizamos la próxima versión también como el complemento build-helper?

    – perdido en la traducción

    14 de septiembre de 2018 a las 6:52

  • Usando Maven 3.5.0 no puedo hacer que esto funcione. Tengo agregación de proyectos y solo se actualizó el pom principal. También probé la herencia del proyecto (junto con la agregación: “las tres reglas” del enlace provisto), y nuevamente solo se actualizó el pom principal.

    – SiKing

    17 mayo 2019 a las 18:24

  • Encontré el interruptor secreto de hacer que funcione: ¡la versión inicial del pom principal y los módulos tienen que ser iguales! Mi pom principal comenzaba con “1-SNAPSHOT” y los módulos tenían “1.0.0-SNAPSHOT”. 🙂

    – SiKing

    17 mayo 2019 a las 19:13

  • Con un proyecto de agregador, la versión del agregador y las versiones de los submódulos no no tiene que ser el mismo. (Por ejemplo, su agregador pom solo puede cambiar raramente y puede permanecer en una versión particular, mientras que los submódulos individuales pueden tener sus propios ciclos de lanzamiento). La propiedad clave para especificar a la versions:set el complemento es -DoldVersion='*'sobre mojohaus.org/versiones-maven-plugin/set-mojo.html dice explícitamente que esta propiedad debe especificarse al procesar un proyecto de agregador.

    – Mateo Sabio

    23 de mayo de 2019 a las 16:08

  • ¿Bajo qué condiciones -DprocessAllModules en realidad funciona? No funciona para mí.

    – AlexR

    23 de junio de 2019 a las 17:59

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

  • Gracias, @Crummy, me has salvado el día.

    – Maksim Kostromin

    30 de enero de 2019 a las 17:52

  • mojohaus.org/build-helper-maven-plugin/parse-version-mojo.html

    – Se canción

    1 de febrero de 2019 a las 2:44

  • O puedes usar -DoldVersion='*'

    – Mateo Sabio

    23 de mayo de 2019 a las 16:09

  • ¡¡Genial, gracias!! Ejemplo con INSTANTÁNEA: mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion}-SNAPSHOT versions:commit

    – oikonomopo

    22 oct 2020 a las 15:15

avatar de usuario
nishant

Es posible que desee consultar los complementos de lanzamiento de Maven release:actualizar-versiones meta. 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, es posible que desee utilizar versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT

avatar de usuario
khmarbaise

Os animo a leer el Libro Maven sobre multi-módulo (reactor) construye.

Me refiero 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 ser cambiado en. Aquí tenga cuidado con la versión no definida solo en la parte principal 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.

  • y buscar qué específicamente?

    – Thorbjorn Ravn Andersen

    3 de enero de 2013 a las 15:56

  • +1 por mostrar el formato adecuado para pom.xml archivos, pero estoy de acuerdo (con @ThorbjørnRavnAndersen) en que leer un libro completo para obtener esta información es una exageración. :pag

    – Priidu Neemre

    27 de enero de 2016 a las 9:09


  • Desafortunadamente, heredar la información de la versión del padre no elimina la carga de tener que modificar todos los archivos pom en el proyecto, porque todos hacen referencia al padre por versión número.

    – Steven el fácilmente divertido

    5 de agosto de 2016 a las 21:41

  • Puede usar versions-maven-plugin que maneja todo esto o puede usar maven-release-plugin y así no necesita manejar esto manualmente …

    – khmarbaise

    6 de agosto de 2016 a las 9:45

  • Todavía me sorprende que la gente simplemente deje caer enlaces aquí sin tener en cuenta que el enlace caduque. Esto hace que esta respuesta sea esencialmente inútil.

    – TheRealChx101

    28 de junio de 2021 a las 8:39

avatar de usuario
yujiao

La mejor manera es, dado que tiene la intención de agrupar sus módulos, puede especificar <dependencyManagement> etiqueta en la parte más externa pom.xml (módulo principal) directo bajo <project> etiqueta. Controla la versión y el nombre del grupo. En su módulo individual, solo necesita especificar el <artifactId> etiqueta en tu pom.xml. Tomará la versión del archivo principal.

  • y buscar qué específicamente?

    – Thorbjorn Ravn Andersen

    3 de enero de 2013 a las 15:56

  • +1 por mostrar el formato adecuado para pom.xml archivos, pero estoy de acuerdo (con @ThorbjørnRavnAndersen) en que leer un libro completo para obtener esta información es una exageración. :pag

    – Priidu Neemre

    27 de enero de 2016 a las 9:09


  • Desafortunadamente, heredar la información de la versión del padre no elimina la carga de tener que modificar todos los archivos pom en el proyecto, porque todos hacen referencia al padre por versión número.

    – Steven el fácilmente divertido

    5 de agosto de 2016 a las 21:41

  • Puede usar versions-maven-plugin que maneja todo esto o puede usar maven-release-plugin y así no necesita manejar esto manualmente …

    – khmarbaise

    6 de agosto de 2016 a las 9:45

  • Todavía me sorprende que la gente simplemente deje caer enlaces aquí sin tener en cuenta que el enlace caduque. Esto hace que esta respuesta sea esencialmente inútil.

    – TheRealChx101

    28 de junio de 2021 a las 8:39

avatar de usuario
buhake sindi

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

  • ¿Es un buen enfoque hacer que los módulos secundarios hereden la versión de un padre? ¿Qué sucede si solo cambian los módulos secundarios?

    – TheRealChx101

    28 de junio de 2021 a las 8:32

  • Esto supone que el módulo raíz es el principal, lo que no tiene por qué ser el caso.

    – Hombre de hojalata

    10 de febrero a las 3:01

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad