tutorial que pom example central basedir archivo maven-2

maven 2 - que - Herencia Maven2



pom.xml dependencies (5)

Creo que lo importante es darse cuenta de que en una compilación de varios módulos, maven siempre usa la versión que proviene de su repositorio local . ¡Esto también se aplica a las construcciones de varios módulos! Entonces, cuando haces referencia al pom "padre", obtienes el artefacto padre publicado de tu repositorio Maven local. Entonces, cuando instales mvn , publicas repetidamente cada módulo en tu repositorio local.

Durante el desarrollo, es probable que sus propios módulos estén versionados en algo como XX-SNAPSHOT. La referencia a parent-pom es XX-SNAPSHOT. No los cambies antes de que estés listo para lanzarlos.

Entonces, un caso simple sería: Antes del lanzamiento inicial, todos los módulos se llaman 1.0-SNAPSHOT. Al realizar la versión inicial "versión dorada", cambie el nombre de todos los módulos 1.0-SNAPSHOT a 1.0. Al iniciar el desarrollo en la versión 1.1, cambia todos los números de versión a 1.1-SNAPSHOT. Y así...

La costumbre es trabajar con versiones de instantáneas hasta que esté liberando, momento en el que actualiza los números de versión en todas partes. En el desarrollo diario, no cambia los números de versión porque los lanzamientos de instantáneas son tratados de manera diferente a los lanzamientos de versiones rígidas.

Editar: Después de pensarlo un poco, creo que parte de tu confusión en la sección de "comentarios" surge de esto: el número de versión en tu pom refleja la versión general de la aplicación . Cualquier cambio de pom dado no necesariamente cambia el número de versión de la aplicación . Si necesita hacer un seguimiento de los cambios en el pom, le sugiero que use un sistema de control de fuente. Entonces, en el período de 3 meses que trabaja en la versión 1.0, es razonable mantener el número de versión en 1.0-SNAPSHOT. En el (por ejemplo) período de 3 semanas que trabaja en 1.1, el número de versión es 1.1-SNAPSHOT.

Si tengo un padre padre y quiero heredar esto para varios proyectos. Normalmente hago esto agregando en la parte superior del proyecto <parent> ... </parent> . Lo que no me gusta de este enfoque es que si algo cambia en mi padre, tengo que editar todo el proyecto que heredó ese padre para modificar el número de versión. ¿Hay un mejor enfoque? Espero que sea comprensible lo que trato de explicar.

Gracias por adelantado.


El control automático de versiones padre (es decir, la omisión de la etiqueta) es un problema polémico en el espacio Maven. Hay un defecto registrado en su contra . Por ahora, se está considerando como una solución o mejora en la rama de la versión 2.1,


Puede utilizar el complemento de versión de Maven al hacer una publicación. Actualizará todos los números de versión automáticamente y creará una etiqueta en su control de origen (si tiene SCM configurado en el POM).

Mis comandos para realizar una publicación suelen ser los siguientes, después de los cuales exporto la etiqueta de SCM y la construyo con "mvn clean package" o "mvn clean deploy".

svn update (or whatever SCM you use) mvn clean mvn release:prepare -DautoVersionSubmodules=true mvn release:clean

Entonces, por ejemplo, si su versión es primero "1.0-SNAPSHOT", entonces el complemento de publicación creará una etiqueta "projectname-1.0" con la versión "1.0", y finalmente aumentará la versión actual a "1.1-SNAPSHOT". El complemento le pedirá las versiones y el nombre de la etiqueta, de modo que puede anular los valores predeterminados.


Debes mantener tus versiones como instantáneas hasta que sea el momento de lanzarlas. De esta forma no tendrás que cambiarlo cada vez que cambies el pom. Sin embargo, una vez que hayas liberado un pom padre, querrás hacer el cambio a todos los hijos (suponiendo que el padre esté fuera de la compilación "reactor" ... de lo contrario, el plugin de lanzamiento lo hubiera fusionado). Hay un complemento relativamente nuevo llamado versions-maven-plugin que puede ayudar a cambiar las versiones.


Lo que no me gusta de este enfoque es que si algo cambia en mi padre, tengo que editar todo el proyecto que heredó ese padre para modificar el número de versión. ¿Hay un mejor enfoque?

¡Sí hay! Eche un vistazo al complemento de versiones de Maven , específicamente:

versions: update-child-modules actualiza la sección principal de los módulos secundarios de un proyecto para que la versión coincida con la versión del proyecto actual.
Por ejemplo, si tiene un agregador pom que también es el padre de los proyectos que agrega y los hijos y las versiones principales no se sincronizan, este mojo puede ayudar a corregir las versiones de los módulos secundarios.
(Tenga en cuenta que puede necesitar invocar a Maven con la opción -N para ejecutar este objetivo si su proyecto se rompe tan gravemente que no puede compilar debido a la falta de correspondencia de la versión).

Editar: por supuesto, con Maven3 ahora puede tener elementos <version> -less <parent> en submódulos:

Los desarrolladores que trabajen en proyectos de múltiples módulos o multi-pom no tendrán que especificar la versión principal en cada submódulo de Maven 3. En su lugar, puede agregar elementos principales sin versión.

Árbitro