scm - Maven: proyectos multimodular y control de versiones
maven release plugin git (3)
Honestamente depende de lo que te gustaría hacer. Los proyectos de varios módulos se crean por varias razones, una de ellas es que solo necesita implementar lo que ha cambiado en lugar de todos los módulos.
Piénselo de esta manera: si tuvo un proyecto sin varios módulos y solo tuvo que cambiar una línea en la capa de servicios, debe reconstruir todo el proyecto e implementar todo el código de nuevo ... aunque solo sea su La capa de servicios cambiará.
Con proyectos de múltiples módulos, puede regenerar su proyecto e implementar solo lo que cambió ... sus servicios. Esto reduce el riesgo y está seguro de que solo se modificó el módulo de servicios.
También tiene una multitud de beneficios al usar proyectos de múltiples módulos que no estoy enumerando aquí, pero ciertamente hay un gran beneficio de NO mantener sincronizados los números de versión de sus módulos.
Cuando construya su proyecto, considere implementarlo en un repositorio que mantendrá todos los archivos jar compatibles para las compilaciones (cada compilación crea una nueva carpeta con el número de versión pom más padre). De esa manera, no necesita mantener la documentación sobre qué tarros son compatibles ... todos se implementan junto con un número de compilación.
¿Cuáles son las mejores prácticas para la versión de software y los proyectos multimódulos con Maven?
Quiero decir, cuando creo un proyecto multimódulo con Maven, ¿cuál es el mejor enfoque para el control de versiones? ¿Para usar una versión única para todos los módulos (definidos en el proyecto superior)? ¿Para usar una versión para cada módulo (definido en el POM de cada módulo)? ¿Hay otro enfoque que me falta? ¿Cuáles son los pros y los contras de cada enfoque?
En general, ¿se lanzan los diferentes módulos juntos (posiblemente compartiendo el mismo número de versión)?
Gracias
Por lo general, crea un proyecto de varios módulos porque considera que los distintos módulos son partes de un todo. Tal vez la pieza del cliente, la pieza del controlador y la pieza de servicios. O tal vez la UI con servicios.
En cualquier caso, tiene sentido tener los números de versión de los distintos módulos para moverse en el paso de bloqueo. Sin embargo, Maven no hace cumplir eso como una regla.
En cuanto a tu pregunta
son los diferentes módulos lanzados juntos (posiblemente compartiendo el mismo número de versión)
Yo pensaría que sí. Esa es una de las razones para tenerlo en un proyecto multi-módulo. De lo contrario podrías tener los módulos como proyectos independientes.
Por supuesto, este es el tipo de cosas que está lleno de casos y excepciones de borde ;-)
Yo estaba buscando una solución para este problema exacto y las versions-maven-plugin eran exactamente lo que necesitaba. No me gusta el complemento de lanzamiento que se comunica con el sistema SCM. El complemento de versiones hace exactamente lo que necesitamos: establece un nuevo número de versión en todos los poms del proyecto:
mvn versions:set -DnewVersion=2.0.0
Luego puedo proceder con confirmaciones, etiquetas y un servidor de compilación oficial ...
EDITAR :
El complemento de versiones depende de cómo se haya organizado un proyecto de varios módulos de Maven: como resultado, a menudo no actualiza todos los archivos POM en un proyecto complejo de múltiples módulos. Descubrí que sed y find hacen el trabajo de manera mucho más confiable:
sed -i ''s/1.0.0-SNAPSHOT/1.0.0-RC1/g'' `find . -name ''pom.xml''`