web-dev-qa-db-fra.com

Maven: comment faire des builds parallèles?

Lorsque vous construisez avec maven sur une machine multicœurs/multi-processeurs, il est souvent possible de créer différents sous-projets en parallèle. Y at-il un moyen de faire cela avec Maven? Y a-t-il un plugin pour ceci/peu importe?

134
Hans-Peter Störr

Maven 3 (à partir de la version bêta 1) prend désormais en charge les constructions parallèles à titre expérimental.

Par exemple,

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

Une documentation complète est disponible sur le wiki Maven.

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

204
hallidave

Certaines applications de construction de CI (par exemple, hudson) peuvent générer plusieurs projets Maven en même temps (et même sur plusieurs machines).

Le support pour cela dans maven 'standalone' serait également Nice, un rapide coup d'œil à travers le traqueur de problèmes maven m'a donné: http://jira.codehaus.org/browse/MNG-3004

12
jor

Les solutions suggérées sont excellentes mais je voulais ajouter quelque chose aux réponses ici concernant la stabilité du test lors de la construction parallèle .

Donc, quand build parallèle Maven est utilisé:

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

Certains problèmes liés aux tests peuvent apparaître. Notez tout comportement dans les tests qui est différent entre l'exécution de tests en série et en parallèle. La plupart du temps, il arrive que l'isolation de test impropre par les ressources .

Par exemple, test1 manipule l'entrée de base de données avec la clé 12345, qui est codée en dur et test2 utilise la même entrée! Ça ne peut pas être bon ...

C'est une situation qui devrait être considérée en premier lieu, mais parfois, elle est oubliée et peut engendrer différents problèmes une fois que le passage à la construction parallèle Maven est effectué.

Dans ce cas, et si vous souhaitez toujours utiliser l'exécution parallèle au moins dans certaines circonstances, vous pouvez (bien sûr, en plus d'essayer de corriger le test et de le rendre correctement isolé) à désactiver les tests Maven en utilisant l'argument -DskipTests:

mvn clean install -T 4 -DskipTests
8
Johnny

Si vous êtes venu à cette question cherchant à trier votre serveur de build et que vous n'utilisez pas celui qui traite avec maven de manière native, le drapeau magique que vous recherchez est le suivant:

-Dmaven.repo.local=someNoneGlobalDir

faites-le pour chacune de vos versions et vous pouvez les laisser s'exécuter en même temps plutôt que d'avoir tout ce qui utilise maven dans une file d'attente!

2
JonnyRaa