Maven Modules + Creación de un único módulo específico

Tengo un proyecto Maven de varios módulos con un proyecto principal P y tres submódulos A , B y C Tanto B como C son proyectos de guerra y ambos dependen de A

Puedo escribir mvn compile en P y tener todos los submódulos comstackdos correctamente. El problema surge cuando quiero hacer operaciones para módulos específicos.

Me gustaría poder empaquetar una guerra para el proyecto B , pero cuando ejecuto el comando del paquete desde el directorio de B , se queja de que no puede encontrar las dependencias de A

A partir de esta pregunta, entiendo: Maven y los módulos dependientes que quizás Maven realmente no está diseñado para este tipo de resolución de dependencia, pero eso plantea la pregunta de ¿cómo puedo empaquetar B ?

  1. ¿Tengo que ejecutar el mvn package para toda la jerarquía del proyecto cuando realmente solo quiero B ?

  2. ¿Debo instalar instantáneas de A en mi repository local cada vez que deseo incluir el paquete B ?

Este segundo escenario no es muy divertido cuando A todavía está en desarrollo activo.

¿Alguna de las mejores prácticas aquí?

¿Alguna de las mejores prácticas aquí?

Utilice las opciones de reactor avanzado de Maven, más específicamente:

 -pl, --projects Build specified reactor projects instead of all projects -am, --also-make If project list is specified, also build projects required by the list 

Así que simplemente cd en el directorio padre P y ejecute:

 mvn install -pl B -am 

Y esto construirá B y los módulos requeridos por B.

Maven fue absolutamente diseñado para este tipo de dependencia.

mvn package no instalará nada en su repository local, simplemente empaqueta el proyecto y lo deja en la carpeta de destino.

mvn install en el proyecto principal (A), con esto todos los submódulos se instalarán en el repository Maven de su computadora; si no hay cambios, solo necesita comstackr / empaquetar el submódulo (B) y Maven tomará el ya empaquetadas e instaladas las dependencias correctas.

Solo necesita mvn install en el proyecto principal si actualizó alguna parte del código.

Si previamente ha ejecutado mvn install en el proyecto B, se habrá instalado en su repository local, de modo que cuando construya el paquete, A Maven pueda resolver la dependencia. Por lo tanto, siempre que instale el proyecto B cada vez que lo modifique, sus comstackciones para el proyecto A estarán actualizadas.

Puede definir un proyecto de varios módulos con un agregador pom para crear un conjunto de proyectos.

También vale la pena mencionar m2eclipse , integra Maven en Eclipse y le permite (opcionalmente) resolver dependencias del espacio de trabajo. Entonces, si está pirateando proyectos múltiples, el contenido del área de trabajo se usará para la comstackción. Una vez que esté satisfecho con sus cambios, ejecute mvn install (en cada proyecto sucesivamente, o use un agregador) para colocarlos en su repository local.

Eche un vistazo a mi respuesta Maven y módulos dependientes .

El plugin Maven Reactor está diseñado para tratar la construcción de parte de un proyecto.

El objective particular que querrá usar es reactor:make .

Usted dice que “realmente solo quiere B”, pero esto es falso. Desea B, pero también desea una A actualizada si ha habido algún cambio (“desarrollo activo”).

Por lo tanto, a veces desea trabajar con A, B y C. Para este caso, tiene el proyecto del agregador P. Para el caso en el que desee trabajar con A y B (pero no desee C), debe crear el proyecto del agregador Q .

Edición 2016 : la información anterior fue quizás relevante en 2009. A partir de 2016, recomiendo ignorar esto en la mayoría de los casos, y simplemente usar los -pl de línea de comandos -am o -pl como se describe en la respuesta aceptada. Si está utilizando una versión de maven anterior a la v2.1, cámbiela primero 🙂