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?
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?
Réponses:
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
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
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
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!