Actualmente estoy trabajando en la optimización de una versión maven de un proyecto maven de varios módulos. El proyecto consiste en aproximadamente 90 módulos de Maven. En general, hay algunas librerías transversales que conforman el núcleo y luego hay alrededor de 15 "módulos de aplicación" que componen toda la aplicación (que luego se despliega como en una GUERRA)¿Crear un maven de múltiples módulos y liberar módulos individuales de forma independiente?
Ahora, en general, todo el proyecto tiene una versión principal "2.5" así que cuando se realiza una nueva versión principal, todos los "módulos de aplicación" tienen la misma versión "2.5.0". Hasta aquí todo bien.
Si un módulo tiene un error que debe corregirse o necesita mejorar, se debe lanzar una nueva versión de ese "módulo de aplicación". Entonces, por ejemplo, el Módulo A tiene un error solucionado, entonces A.jar debería estar en la versión "2.5.1", mientras que el resto debería ser "2.5.0".
padre (2.5.0-SNAPSHOT - Módulo A (2.5.1-SNAPSHOT) - Módulo B (2.5.0-SNAPSHOT) - Módulo C (2.5.2-SNAPSHOT) - War (2.5. 3-SNAPSHOT) < - 3 al final, porque C tuvo 2 relanzamientos y A uno y se lanzó después de cada lanzamiento del módulo por simplicidad
Nos decidimos por gestionar las versiones de artefactos en el pom maestro para que nos pongamos No es necesario actualizar las versiones de dependencia de cada artefacto después de liberar un módulo.
Así que ahora cada vez que esté listo un "módulo de aplicación" actualizado, usamos el maven lanzar el complemento para llevar a cabo la publicación de ese módulo (Estamos lanzando un módulo, no todo el proyecto). Entonces, digamos que estamos liberando el Módulo A en la versión 2.5.4, lo que resulta en que A.jar se implemente como versión 2.5.4 y termine actualizando el código del módulo a 2.5.5-SNAPSHOT.
Una vez hecho esto, debemos actualizar la versión en el pom maestro, por lo que todos los módulos continúan haciendo referencia a la versión correcta.
Gracias a la sección DependencyManagement del pom del maestro, si construyo el módulo de Guerra, se selecciona automáticamente la nueva versión del módulo A.
Ahora viene la parte difícil: Tan pronto como todos los módulos son liberados, Se debe lanzar una nueva versión de la aplicación web. Esto debería contener todos los Módulos sin modificar, así como los que acabamos de lanzar. Actualmente estoy luchando sobre cómo hacer eso. Si dependo de la versión padre poms, el lanzamiento contendría versiones de SNAPSHOT (todas las versiones de una versión son demasiado altas), lo que no puedo permitir con el complemento de la versión.
¿Cuál sería la mejor solución para este dilema?
Tuve una idea para convertir la gestión de dependencias en un pom independiente, que luego se importa a la gestión de dependencia poms maestra utilizando el ámbito de "importación".
¿Es este tipo de szenario una idea estúpida? ¿Hay alternativas para desarrollar y mantener una gran aplicación de múltiples módulos como esta? Simplemente tener todas las versiones sincronizadas y usar el complemento de lanzamiento en todo el proyecto no es una opción ya que la aplicación es grande y las aplicaciones del cliente tienen que cargar versiones de módulos actualizadas. Algunos de nuestros clientes tienen conexiones realmente lentas, por lo que desplegar todos los módulos cada vez los haría realmente infelices.
Ayuda muy apreciada,
Chris
Hola noahz, Gracias por la explicación que ayudó. Me di cuenta de que esto funcionaría si mis módulos no tuvieran dependencias entre ellos. Desafortunadamente lo hacen. Tenía otra idea de cómo podría resolverse este problema y creé una nueva respuesta con él (Puede escribir más texto de esa manera ;-)) –