2009-02-13 16 views
17

Si tengo un pom 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.Herencia de Maven2

Gracias de antemano.

Respuesta

2

Creo que lo importante es darse cuenta de que en una acumulación de varios módulos, Maven siempre utiliza la versión que es la 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 hace mvn install, publica repetidamente cada módulo en su repositorio local.

Durante el desarrollo, sus propios módulos probablemente tengan una versión similar a X.X-SNAPSHOT. La referencia a parent-pom es X.X-SNAPSHOT. No los cambies antes de que estés listo para lanzarlos.

Así que un caso simple sería: Antes de la versión 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í sucesivamente ...

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 creo que algo de su confusión en la sección "comentarios" surge de esto: El número de versión en su pom refleja la versión de aplicación general . Cualquier cambio dado pom no cambia necesariamente la aplicación número de versió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.

+0

si mi padre tiene la versión 1.0-SNAPSHOT. Y hago un cambio en mi padre e incremento la versión para que digamos 1.1-SNAPSHOT tengo que aumentarlo en cada niño también ¿no? No entiendo lo que quieres decir al actualizar cada vez. – kukudas

+0

Traté de editar;) – krosenvold

+0

? No entiendo :) – kukudas

6

El control automático de versiones padre (es decir, la omisión de la etiqueta) es un problema polémico en el espacio Maven. There is a defect logged against it. Por ahora, se está considerando como una solución o mejora en la rama de la versión 2.1,

8

Puede usar el Maven Release Plugin 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 

Así por ejemplo, si la versión es primero "1.0-SNAPSHOT", entonces el plugin liberación creará una etiqueta "projectname-1.0" con la versión "1.0", y, finalmente, aumentar la versión actual de "1.1- INSTANTÁNEA".El complemento le pedirá las versiones y el nombre de la etiqueta, de modo que puede anular los valores predeterminados.

3

Debe mantener sus versiones como instantáneas hasta que sea hora de lanzar. 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.

16

Lo que no me gusta de este enfoque es que si algo cambia en mi padres que tengo que editar todos los proyectos que se heredado por ese padre a modificar el número de versión. ¿Hay un mejor enfoque ?

Sí, lo hay! Echar un vistazo a la Maven Versions Plugin, específicamente:

versiones: update-niños-módulos actualiza la sección de los padres de los niños módulos de un proyecto por lo que la versión coincide con la versión del proyecto actual .
Por ejemplo, si tiene un pom agregador que es también el padre de los proyectos que agregados y los niños y los padres versiones perder la sincronización, este mojo puede ayudar a solucionar las versiones de los módulos niño .
(Tenga en cuenta que puede que tenga que invocar Maven con la opción -N con el fin de plazo este objetivo si su proyecto es roto tan gravemente que no puede construir debido a la falta de coincidencia versión).


Editar: Por supuesto, el uso de Maven3 ahora puede tener < versión> -menos < padres> elementos en submódulos:

Los desarrolladores que trabajan en varios módulos o multi- Los proyectos 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.

Ref

+1

Parece que los elementos principales sin versión aún no se han implementado. http://jira.codehaus.org/browse/MNG-624 – davidmc24

Cuestiones relacionadas