Maven: comment faire des builds parallèles?

152

Lorsque vous construisez avec maven sur une machine multicœur / multi-CPU, il est souvent possible de construire différents sous-projets en parallèle. Y a-t-il un moyen de faire cela avec maven? Y a-t-il un plugin pour ça / peu importe?

Hans-Peter Störr
la source

Réponses:

229

Maven 3 (à partir de la version bêta 1) prend désormais en charge les versions parallèles en tant que fonctionnalité expérimentale.

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

La documentation complète peut être trouvée sur le wiki Maven.

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

hallidave
la source
5
Que signifie 1,5 threads? Si j'ai un système à un seul cœur, cela signifie-t-il 1 thread, mais un système à double cœur donne 3 threads?
Saad Malik
4
@SaadMalik Oui, exactement, 3 threads sur dual core, 6 threads sur des systèmes quad core, etc.
t0r0X
Y a-t-il un argument que nous pouvons utiliser pour la JVM, afin que nous puissions l'utiliser dans eclipse?
Jason Huntley
Le support Eclipse n'appelle pas maven en externe.
Thorbjørn Ravn Andersen
18

Les solutions suggérées sont excellentes mais je voulais ajouter quelque chose aux réponses ici concernant la stabilité des tests pendant les constructions parallèles .

Ainsi, lorsque la construction parallèle Maven est utilisée:

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 avec les tests peuvent apparaître. Notez tout comportement dans les tests qui est différent entre l'exécution de tests série et parallèle. La plupart du temps, cela arrive à une isolation de test incorrecte en termes de ressources .

Par exemple, test1 manipule l'entrée db 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 doit être prise en compte en premier lieu, mais parfois elle est oubliée et pourrait entraîner différents problèmes une fois le passage à la construction parallèle de maven effectué.

Dans le cas où cela se produit et que vous souhaitez toujours utiliser l'exécution parallèle au moins dans certaines occasions, vous pouvez (bien sûr, en plus d'essayer de corriger le test et de le rendre correctement isolé) pour désactiver les tests Maven à l' aide de l'argument -DskipTests:

mvn clean install -T 4 -DskipTests
Johnny
la source
12

Certaines des applications de construction CI (par exemple, hudson) peuvent créer plusieurs projets maven en même temps (et même sur plusieurs machines).

La prise en charge de cela dans maven `` standalone '' serait également bien, un rapide coup d'œil sur le suivi des problèmes de maven m'a donné: http://jira.codehaus.org/browse/MNG-3004

jor
la source
Je pense que la fonctionnalité Hudson pour plusieurs projets maven en même temps est cassée, comme indiqué dans les commentaires JIRA du MNG-3004.
Dougnukem
2

Si vous êtes venu à cette question cherchant à trier votre serveur de construction et que vous n'utilisez pas celui qui traite nativement maven, le drapeau magique que vous recherchez est le suivant:

-Dmaven.repo.local=someNoneGlobalDir

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

JonnyRaa
la source