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