Construir módulo único a partir de pom multimodular
-
06-07-2019 - |
Pregunta
¿Es posible hacerlo?
El entorno: Multimodule pom consta de 3 módulos: mm1, mm2, mm3. El módulo mm2 tiene mm1 como dependencia. Es posible construir pom padre sin ningún error.
La pregunta: ¿es posible construir un solo módulo mm2 (es decir, ejecutar maven desde el directorio base de mm2) sin instalar mm1 en el repositorio local?
Gracias.
Solución
Sin instalación automática no, pero es posible construir solo proyectos seleccionados. Necesitas tener un módulo multi (supongo que lo tienes). En el modo reactor, cada comando debe ejecutarse desde la raíz del reactor .
Así que en tu caso:
mvn reactor: make -Dmake.folders = mm2
En este caso, construyes un módulo mm2 y módulos de los que depende (mm1).
Enlaces útiles:
A partir de ejemplos de libros, solo construyo la persistencia del proyecto y su modelo de dependencia. Otros proyectos están intactos con
mvn reactor: make -Dmake.folders = sample-persist
Otro comando útil es reactor: make-dependents
que construye proyectos que dependen de X.
Otros consejos
No estoy seguro de lo que quiere decir exactamente con " sin instalar mm1 en el repositorio local " ;. ¿Te refieres previamente a construir mm2 o nunca?
En caso de duda, quizás una de las nuevas opciones de compilación anunciadas en Las sugerencias y trucos de Maven: Opciones avanzadas de Reactor en la publicación del blog pueden ayudar:
Comenzando con el lanzamiento de Maven 2.1, hay una nueva linea de comando de Maven Opciones que te permiten manipular. la forma en que Maven construirá Proyectos multimodulares. Estos nuevos las opciones son:
-rf, --resume-from Resume reactor from specified project -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 -amd, --also-make-dependents If project list is specified, also build projects that depend on projects on the list
Estaba pensando específicamente en las opciones -pl
y -am
. Para crear un subconjunto de los módulos, ejecute lo siguiente desde el directorio raíz
$ mvn --projects mm2 --also-make install
Sin embargo, no estoy seguro de que esto responda a tu pregunta (lo cual no es totalmente claro para mí).
Esto va en contra del principio de dependencias de Maven2. ¿Cuál es el interés de hacer eso exactamente?
Sin embargo, podemos imaginar definir la dependencia mm1 de mm2 como una dependencia system
:
<dependency>
<groupId>...</groupId>
<artifactId>mm1</artifactId>
<version>...</version>
<scope>system</scope>
<systemPath>../mm1/target/</systemPath>
</dependency>