Maven: ¿cómo hacer compilaciones paralelas?

152

Cuando construye con Maven en una máquina multinúcleo / CPU múltiple, a menudo sería posible construir diferentes subproyectos en paralelo. ¿Hay alguna manera de hacer esto con maven? ¿Hay un complemento para esto / lo que sea?

Hans-Peter Störr
fuente

Respuestas:

228

Maven 3 (a partir de beta 1) ahora admite compilaciones paralelas como una característica experimental.

Por ejemplo,

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

La documentación completa se puede encontrar en la wiki de Maven.

https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

hallidave
fuente
55
¿Qué significa 1.5 hilos? Si tengo un sistema de núcleo único, ¿eso significa 1 subproceso, pero un sistema de doble núcleo da como resultado 3 subprocesos?
Saad Malik
44
@SaadMalik Sí, exactamente, 3 hilos en doble núcleo, 6 hilos en sistemas de cuatro núcleos, etc.
t0r0X
¿Hay algún argumento que podamos usar para la JVM, para que podamos usar esto en eclipse?
Jason Huntley
El soporte de Eclipse no invoca a maven externamente.
Thorbjørn Ravn Andersen
18

Las soluciones sugeridas son geniales, pero quería agregar algo a las respuestas aquí con respecto a la estabilidad de la prueba durante las compilaciones paralelas .

Entonces, cuando se usa la construcción paralela de Maven :

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

Pueden aparecer algunos problemas con las pruebas . Tenga en cuenta cualquier comportamiento en las pruebas que sea diferente entre la ejecución de pruebas en serie y paralelas. La mayoría de las veces sucede para hacer un aislamiento de prueba no apropiado en cuanto a recursos .

Por ejemplo, test1 manipula la entrada db con la clave 12345, que está codificada y test2 usa la misma entrada. No puede ser bueno ...

Es una situación que debe considerarse en primer lugar, pero en algún momento se olvida y podría generar problemas diferentes una vez que se realiza el cambio a la construcción paralela de Maven.

En caso de que eso suceda, y aún desee usar la ejecución paralela al menos en algunas ocasiones, puede (por supuesto, además de tratar de arreglar la prueba y aislarla adecuadamente) para deshabilitar las pruebas de Maven con el argumento -DskipTests:

mvn clean install -T 4 -DskipTests
Johnny
fuente
12

Algunas de las aplicaciones de compilación de CI (por ejemplo, hudson) pueden construir múltiples proyectos maven al mismo tiempo (e incluso en múltiples máquinas).

El soporte para esto en maven 'autónomo' también sería bueno, un vistazo rápido a través del rastreador de problemas de maven me dio: http://jira.codehaus.org/browse/MNG-3004

jor
fuente
Creo que la funcionalidad de Hudson para múltiples proyectos de Maven al mismo tiempo está rota como se indica en los comentarios de MNG-3004 JIRA.
Dougnukem
2

Si llegaste a esta pregunta buscando resolver tu servidor de compilación y no estás usando uno que trate con maven de forma nativa, la bandera mágica que estás buscando es esta:

-Dmaven.repo.local=someNoneGlobalDir

¡haz eso para cada una de tus compilaciones y puedes dejar que se ejecuten todas al mismo tiempo en lugar de tener todo lo que usa Maven en una cola!

JonnyRaa
fuente