Maven: jak tworzyć równoległe kompilacje?

152

Podczas kompilowania za pomocą maven na maszynie wielordzeniowej / wieloprocesorowej często byłoby możliwe równoległe tworzenie różnych podprojektów. Czy jest sposób, aby to zrobić z maven? Czy jest wtyczka do tego / czegokolwiek?

Hans-Peter Störr
źródło

Odpowiedzi:

228

Maven 3 (od wersji beta 1) obsługuje teraz równoległe kompilacje 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łną dokumentację można znaleźć na wiki Maven.

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

hallidave
źródło
5
Co oznacza 1,5 wątku? Jeśli mam system jednordzeniowy, czy oznacza to 1 wątek, ale system dwurdzeniowy daje w wyniku 3 wątki?
Saad Malik
4
@SaadMalik Tak, dokładnie, 3 wątki w systemie dwurdzeniowym, 6 wątków w systemach czterordzeniowych itp.
t0r0X
Czy jest jakiś argument, którego możemy użyć dla JVM, abyśmy mogli go użyć w zaćmieniu?
Jason Huntley
Obsługa Eclipse nie wywołuje zewnętrznego programu maven.
Thorbjørn Ravn Andersen
18

Sugerowane rozwiązania są świetne, ale chciałem dodać coś do odpowiedzi tutaj dotyczących stabilności testu podczas równoległych kompilacji .

Tak więc, gdy używana jest kompilacja równoległa Mavena :

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 testów może się pojawić. Zwróć uwagę na wszelkie zachowania w testach, które różnią się między wykonywaniem testów szeregowych i równoległych. W większości przypadków zdarza się, że izolacja testu jest niewłaściwa pod względem zasobów .

Na przykład test1 manipuluje wpisem db za pomocą klucza 12345, który jest zakodowany na stałe, a test2 używa tego samego wpisu! To nie może być dobre ...

Jest to sytuacja, którą należy w pierwszej kolejności rozważyć, ale czasami o niej zapomina się i może prowadzić do różnych problemów po przejściu na równoległą kompilację maven.

W przypadku, gdy tak się stanie, a nadal chcesz użyć wykonywania równoległego przynajmniej w niektórych przypadkach, możesz (oczywiście oprócz próby naprawienia testu i uczynienia go odpowiednio izolowanym), aby wyłączyć przebiegi testowe Mavena za pomocą argumentu -DskipTests:

mvn clean install -T 4 -DskipTests
Jasio
źródło
12

Niektóre aplikacje do tworzenia CI (np. Hudson) mogą budować wiele projektów Maven w tym samym czasie (a nawet na wielu komputerach).

Wsparcie dla tego w `` samodzielnym '' maven również byłoby fajne, szybkie przejrzenie narzędzia do śledzenia problemów Mavena dało mi: http://jira.codehaus.org/browse/MNG-3004

jor
źródło
Myślę, że funkcjonalność Hudsona dla wielu projektów Maven w tym samym czasie jest zepsuta, jak wskazano w komentarzach MNG-3004 JIRA.
Dougnukem
2

Jeśli przyszedłeś do tego pytania, chcąc uporządkować serwer kompilacji, a nie używasz takiego, który natywnie radzi sobie z mavenem, magiczna flaga, której szukasz, jest taka:

-Dmaven.repo.local=someNoneGlobalDir

zrób to dla każdej swojej kompilacji, a możesz pozwolić im działać jednocześnie, zamiast mieć wszystko, co używa mavena w kolejce!

JonnyRaa
źródło