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?
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:
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
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
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
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!