Wenn Sie mit maven auf einem Multicore- / Multi-CPU-Computer erstellen, ist es häufig möglich, verschiedene Teilprojekte parallel zu erstellen. Gibt es eine Möglichkeit, dies mit Maven zu tun? Gibt es ein Plugin für dieses / was auch immer?
Wenn Sie mit maven auf einem Multicore- / Multi-CPU-Computer erstellen, ist es häufig möglich, verschiedene Teilprojekte parallel zu erstellen. Gibt es eine Möglichkeit, dies mit Maven zu tun? Gibt es ein Plugin für dieses / was auch immer?
Antworten:
Maven 3 (ab Beta 1) unterstützt jetzt parallele Builds als experimentelles Feature.
Beispielsweise,
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
Die vollständige Dokumentation finden Sie im Maven-Wiki.
https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3
Die vorgeschlagenen Lösungen sind großartig, aber ich wollte den Antworten hier etwas zur Teststabilität während paralleler Builds hinzufügen .
Wenn also Maven Parallel Build verwendet wird:
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
Einige Probleme mit Tests können auftreten. Beachten Sie jedes Verhalten in Tests, das sich zwischen serieller und paralleler Testausführung unterscheidet. In den meisten Fällen wird die Testisolierung in Bezug auf die Ressourcen nicht ordnungsgemäß durchgeführt .
Zum Beispiel manipuliert test1 den Datenbankeintrag mit dem Schlüssel 12345, der fest codiert ist und test2 denselben Eintrag verwendet! Es kann nicht gut sein ...
Es ist eine Situation, die an erster Stelle in Betracht gezogen werden sollte, aber manchmal wird sie vergessen und kann zu unterschiedlichen Problemen führen, sobald der Wechsel zum parallelen Maven-Build erfolgt.
In diesem Fall und wenn Sie zumindest in einigen Fällen immer noch die parallele Ausführung verwenden möchten, können Sie (abgesehen davon, dass Sie versuchen, den Test zu reparieren und ordnungsgemäß zu isolieren) Maven-Testläufe mit dem Argument -DskipTests deaktivieren :
mvn clean install -T 4 -DskipTests
Einige der CI-Build-Anwendungen (z. B. Hudson) können mehrere Maven-Projekte gleichzeitig erstellen (und sogar auf mehreren Computern).
Die Unterstützung dafür in Maven 'Standalone' wäre auch nett, ein kurzer Blick durch den Maven Issue Tracker gab mir: http://jira.codehaus.org/browse/MNG-3004
Wenn Sie zu dieser Frage gekommen sind, um Ihren Build-Server zu sortieren, und keinen verwenden, der sich nativ mit Maven befasst, ist die magische Flagge, nach der Sie suchen, folgende:
-Dmaven.repo.local=someNoneGlobalDir
Wenn Sie dies für jeden Ihrer Builds tun, können Sie sie alle gleichzeitig ausführen lassen, anstatt alles, was Maven verwendet, in einer Warteschlange zu haben!