java - pom - mvn package
Maven Modules+Construyendo un único módulo específico (5)
Tengo un proyecto de varios módulos de Maven 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 hacer que todos los mvn compile
correctamente. El problema viene 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 package desde el directorio de B
, se queja de que no puede encontrar las dependencias para A
Entiendo de esta pregunta: Maven y los módulos dependientes que quizás Maven no está realmente diseñado para este tipo de resolución de dependencia, pero eso plantea la pregunta de ¿cómo empaqueto B
?
¿Tengo que ejecutar el
mvn package
para toda la jerarquía del proyecto cuando realmente quieroB
?¿Tengo que instalar instantáneas de A en mi repositorio local cada vez que quiero empaquetar
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 avanzadas de reactores 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
Entonces simplemente cd
en el directorio padre P y ejecuta:
mvn install -pl B -am
Y esto construirá B y los módulos requeridos por B.
Dices que "realmente solo quieres B", pero esto es falso. Desea B, pero también desea una A actualizada si ha habido algún cambio ("desarrollo activo").
Entonces, a veces desea trabajar con A, B y C. Para este caso, tiene el proyecto agregador P. En el caso de que quiera trabajar con A y B (pero no desea C), debe crear el proyecto agregador Q .
Edición 2016 : la información anterior quizás fue relevante en 2009. A partir de 2016, recomiendo encarecidamente ignorar esto en la mayoría de los casos, y simplemente usar los -pl
de línea de comando -am
o -pl
como se describe en la respuesta aceptada. Si está utilizando una versión de maven anterior a v2.1, cámbiela primero :)
Echa 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 objetivo particular que querrás usar es reactor:make
.
Maven fue absolutamente diseñado para este tipo de dependencia.
mvn package
no instalará nada en su repositorio local, solo 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 repositorio de Maven de su computadora, si no hay cambios, solo necesita compilar / empaquetar el submódulo (B) y Maven tomará la decisión. dependencias ya empaquetadas e instaladas a la perfección.
Solo necesita una mvn install
en el proyecto principal si ha actualizado alguna parte del código.
Si anteriormente ejecutó mvn install en el proyecto B, se habrá instalado en su repositorio local, de modo que cuando compile el paquete A Maven puede resolver la dependencia. Entonces, siempre que instale el proyecto B cada vez que lo cambie, sus compilaciones para el proyecto A estarán actualizadas.
Puede definir un proyecto de múltiples módulos con un pom agregador para construir un conjunto de proyectos.
También vale la pena mencionar m2eclipse , integra Maven en Eclipse y le permite (opcionalmente) resolver dependencias desde el área de trabajo. Por lo tanto, si está hackeando varios proyectos, el contenido del área de trabajo se utilizará para la compilación. Una vez que esté satisfecho con sus cambios, ejecute mvn install (en cada proyecto, a su vez, o use un agregador) para colocarlos en su repositorio local.