Maven: come eseguire build parallele?


152

Quando si costruisce con Maven su una macchina multicore / multi-CPU è spesso possibile costruire diversi sottoprogetti in parallelo. C'è un modo per farlo con Maven? C'è un plugin per questo / qualunque cosa?

Risposte:


229

Maven 3 (dalla versione beta 1) ora supporta build parallele come funzionalità sperimentale.

Per esempio,

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 documentazione completa è disponibile sul wiki di Maven.

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


5
Cosa significa 1.5 thread? Se ho un sistema single core, significa 1 thread, ma un sistema dual core produce 3 thread?
Saad Malik,

4
@SaadMalik Sì, esattamente, 3 thread su dual core, 6 thread su sistemi quad core, ecc.
t0r0X

C'è un argomento che possiamo usare per la JVM, quindi possiamo usarlo in Eclipse?
Jason Huntley,

Il supporto di Eclipse non invoca maven esternamente.
Thorbjørn Ravn Andersen,

18

Le soluzioni suggerite sono fantastiche, ma ho voluto aggiungere qualcosa alle risposte qui per quanto riguarda la stabilità del test durante build parallele .

Quindi, quando viene utilizzata la build parallela di Maven :

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

Possono apparire alcuni problemi con i test . Nota qualsiasi comportamento nei test che è diverso tra l'esecuzione del test seriale e parallelo. La maggior parte delle volte succede a testare l'isolamento in modo non corretto sotto il profilo delle risorse .

Ad esempio, test1 manipola la voce db con il tasto 12345, che è hardcoded e test2 usa la stessa voce! Non può essere buono ...

È una situazione che dovrebbe essere considerata in primo luogo, ma a volte viene dimenticata e potrebbe portare a diversi problemi una volta che si passa al build parallelo maven.

Nel caso ciò accada, e vuoi comunque usare l'esecuzione parallela almeno in alcune occasioni, puoi (ovviamente, oltre a provare a riparare il test e renderli adeguatamente isolati) per disabilitare le esecuzioni di test Maven usando l'argomento -DskipTests:

mvn clean install -T 4 -DskipTests


12

Alcune applicazioni di compilazione di elementi della configurazione (ad es. Hudson) possono creare contemporaneamente più progetti maven (e persino su più macchine).

Anche il supporto per questo 'standalone' di Maven sarebbe bello, una rapida occhiata al tracker del problema di Maven mi ha dato: http://jira.codehaus.org/browse/MNG-3004


Penso che la funzionalità Hudson per più progetti maven allo stesso tempo sia rotta come indicato nei commenti JIRA MNG-3004.
Dougnukem,

2

Se sei arrivato a questa domanda cercando di risolvere il tuo server di build e non ne stai usando uno che si occupa nativamente della bandiera magica che stai cercando è questa:

-Dmaven.repo.local=someNoneGlobalDir

fallo per ognuna delle tue build e puoi farle funzionare tutte allo stesso tempo invece di avere tutto ciò che usa Maven in coda!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.