Maven: jak zrobić równoległe buildy?

Gdy budujesz z mavenem na maszynie wielordzeniowej / wielordzeniowej, często możliwe jest równoległe budowanie różnych podprojektów. Jest na to sposób z mavenem? Czy istnieje plugin do tego / cokolwiek?

Author: Hans-Peter Störr, 2009-02-24

4 answers

Maven 3 (od wersji beta 1) obsługuje teraz Kompilacje równoległe jako funkcję eksperymentalną.

Na przykład,

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

Pełna dokumentacja znajduje się na Maven wiki.

Https://cwiki.apache.org/confluence/display/MAVEN/Parallel + buduje + w + Maven+3

 175
Author: hallidave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-23 11:58:28

Hudson) może budować wiele projektów Mavena w tym samym czasie (a nawet na wielu maszynach).

Wsparcie dla tego w Maven 'standalone' byłoby również miłe, szybkie spojrzenie przez Maven issue tracker dał mi: http://jira.codehaus.org/browse/MNG-3004

 12
Author: jor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-24 11:59:41

Proponowane rozwiązania są świetne, ale chciałem dodać coś do odpowiedzi tutaj dotyczących stabilności testu podczas parallel builds .

Więc, gdy Maven parallel build jest używany:

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

Niektóre problemy z testami mogą się pojawić. Zwróć uwagę na zachowanie w testach, które różni się od wykonania testu szeregowego i równoległego. W większości przypadków zdarza się, że nie sprawdza się izolacja zasobów .

Na przykład test1 manipuluje db wpis z kluczem 12345, który jest zakodowany na twardo i test2 używa tego samego wpisu! To nie może być dobre...

Jest to sytuacja, która powinna być rozważona w pierwszej kolejności, ale czasami jest zapomniana i może prowadzić do różnych problemów po przejściu na równoległą kompilację Mavena.

W przypadku, gdy tak się stanie i nadal chcesz używać równoległego wykonania przynajmniej w niektórych przypadkach, możesz (oczywiście, oprócz próby poprawienia testu i uczynienia go odpowiednio izolowanym) wyłączyć Maven test uruchamia używając argumentu-DskipTests:

mvn clean install -T 4 -DskipTests
 5
Author: Stas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 20:52:48

Jeśli przyszedłeś na to pytanie, aby uporządkować swój serwer kompilacji, a nie używasz takiego, który zajmuje się Maven natywnie, magiczna flaga, której szukasz, jest taka:

-Dmaven.repo.local=someNoneGlobalDir

Zrób to dla każdej z Twoich kompilacji, a możesz pozwolić im uruchomić wszystkie w tym samym czasie, zamiast mieć wszystko, co używa Mavena w kolejce!

 1
Author: Jonny Leeds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-24 13:31:00