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?

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


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


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


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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.