Maven: Wie mache ich parallele Builds?

152

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?

Hans-Peter Störr
quelle

Antworten:

228

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

Hallidave
quelle
5
Was bedeutet 1,5 Threads? Wenn ich ein Single-Core-System habe, bedeutet das 1 Thread, aber ein Dual-Core-System führt zu 3 Threads?
Saad Malik
4
@ SaadMalik Ja, genau, 3 Threads auf Dual-Core, 6 Threads auf Quad-Core-Systemen usw.
t0r0X
Gibt es ein Argument, das wir für die JVM verwenden können, damit wir es in Eclipse verwenden können?
Jason Huntley
Die Eclipse-Unterstützung ruft Maven nicht extern auf.
Thorbjørn Ravn Andersen
18

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
Johnny
quelle
12

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

jor
quelle
Ich denke, die Hudson-Funktionalität für mehrere Maven-Projekte gleichzeitig ist defekt, wie in den MNG-3004 JIRA-Kommentaren angegeben.
Dougnukem
2

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!

JonnyRaa
quelle