2008-10-02 10 views
30

Używam lokalnego artefakala do proxy żądania, ale fazy budowy i testowania są nadal nieco powolne. To nie jest rzeczywista kompilacja i testy, które są powolne, to "rozgrzewka" ramy maven2. Jakieś pomysły?Jak mogę przyspieszyć mój build maven2?

+2

Jeśli znajdziesz dobrą odpowiedź poza pasmem (np. W innych witrynach), byłoby to bardzo cenne, jeśli umieścisz je tutaj jako odpowiedź. – Einar

+0

Znalazłem [tego artykułu] (http://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/) pomocne. Ograniczenie dostępu do Internetu działa dobrze dla mnie. –

Odpowiedz

22

Istnieje kilka możliwości optymalizacji niektórych zadań kompilacji. Na przykład zadanie "czyste" można zoptymalizować z minut do zaledwie milisekund za pomocą prostego - zmienić nazwę folderu "docelowego" zamiast usunąć.

Aby uzyskać szczegółowe informacje, jak to zrobić, należy zapoznać się z Speed up Maven build.

+0

fajne sztuczki, często też marnuję niepotrzebny czas na czystym zadaniu. –

+2

Rozwiązałem ten problem przez chwilę i poświęciłem czas, aby napisać o tym blogu ... mam nadzieję, że pomoże to innym! http://www.urbancat.org/2012/05/how-to-speed-maven-up.html – Nadav

+1

@nadav link już nie działa. Czy możesz to poprawić? –

9

Nie wiem, jakiej wersji Mavena używasz, zakładam 2, ale dam to, czego używam dla Mavena 1.x, aby przyspieszyć i sprawić, żeby rzeczy układały się odrobinę szybciej.

Będą widelec testy junit do nowego procesu (także pomaga przy użyciu zmiennych środowiskowych w testach etc i daje testów trochę więcej pamięci.

-Dmaven.junit.fork=true 
-Dmaven.junit.jvmargs=-Xmx512m 

This widelce kompilacji, które mogłyby przyspieszyć Ci

-Dmaven.compile.fork=true 

mam nadzieję, że to może pomóc trochę go wypróbować.

odnoszą się także do get more speed with your maven2 build.

+0

Używam maven2, ale jest to fajny link i na pewno spróbuję tej poprawionej wersji do moich plików do pobrania. Jednak problemem było więcej kompilacji i testowania czasu uruchamiania ... –

+0

Link nie działa –

+0

Włączenie widelca sprawiło, że mój projekt był nieco szybszy –

2

odkryłem, że podczas analizowania projektów reaktorów jest znacznie wolniejszy niż pojedynczych projektów pom. Jeśli budowa jest reaktor (multi-module) i programiści nie pracują na wszystkich modułów w tym samym czasie, można usunąć POM nadrzędnego i zbudować je osobno, rozwiązywanie zależności użyciu lokalnego repo. Wadą jest to, że trzeba zainstalować lub wdrożyć moduł w celu jego utrzymaniu, aby zobaczyć zmiany.

Ponadto warto przyjrzeć się nowemu Maven 2.1 M1, który zawiera znaczące poprawki prędkości.

Jeśli żaden z nich nie pomaga, pisać więcej szczegółów na temat konfiguracji projektu (struktury modułów i wtyczek), parametry linii poleceń i konfiguracji sprzętowej (pamięci i dysku). Uruchamianie Mavena z opcją -X może również pokazywać, gdzie zajmuje czas.

+0

to rzeczywiście jest projekt reaktora, którego używam. trzy małe moduły i webprojekt. Próbowałem tej wersji 2.1 i wyglądało to trochę szybciej. –

1

Używam lokalnie zainstalowanego Nexusa.

+0

Nexus też jest dobry. Użyłem zarówno nexusa, jak i artefakala i oba są dość szybkie. Nexus jest nieco łatwiejszy do skonfigurowania. IMO może również działać builder –

+0

buildr. – gatoatigrado

+0

Co robi Nexus, który może pomóc w tym procesie? – snowe

3

Możesz użyć -DskipTests=true, aby pominąć testy jednostkowe. które przyspieszają tworzy

+1

Więc nie robiłbym żadnych testów w pierwszej kolejności ..? – Rob

+0

Robot CI zrobi to wszystko podczas budowy, więc muszą tam być. –

+0

-o wskazanie trybu offline pomaga, ponieważ nie sprawdza zdalnych aktualizacji migawek – Abs

4
  1. Regulacja konfigurację pamięci, aby optimum np: dodanie tej linii mvn.bat zestaw MAVEN_OPTS = -Xmx512m -XX: MaxPermSize = 256m

  2. Czyste fazy MVN zwykle usuwa folder docelowy. Zamiast tego, jeśli zmieniamy nazwę folderu docelowego, faza czyszczenia będzie znacznie szybsza. < quickClean>

  3. -Dmaven.test.skip = true pominie wykonanie testu.

  4. Dodaj -Denforcer.skip = true do argumentu linii poleceń mvn (To jest egzekwowanie wersje Maven, jdk etc, możemy pominąć go po początkowych seriach)

  5. Wyłącz operacje non-krytyczne podczas fazy budowlanej: Analiza, pokolenie javadoc, pakowanie źródło.Pozwoli to zaoszczędzić ogromny czas.

  6. Spawnig nowy sposób pozwala również na poprawę czasu -Dmaven.junit.fork = prawdziwe (widelca testy junit do nowego procesu) -Dmaven.compile.fork = prawdziwe (w Forks kompilacji)

    Mam nadzieję, że to pomoże.

5

Jeśli używasz Maven3 ($ mvn -version), można również śledzić tę guide. W moim przypadku, wyniki są następujące:

Normalne wykonanie:

$ mvn clean install 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 03:05 min 
[INFO] Finished at: 2015-07-15T11:47:02+02:00 
[INFO] Final Memory: 88M/384M 

z równoległym opracowaniem (4 wątki):

$ mvn -T 4 clean install 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 02:22 min (Wall Clock) 
[INFO] Finished at: 2015-07-15T11:50:57+02:00 
[INFO] Final Memory: 80M/533M 

Parallel Processing (2 wątków na rdzeń)

$ mvn -T 2C clean install 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 02:12 min (Wall Clock) 
[INFO] Finished at: 2015-07-15T12:00:29+02:00 
[INFO] Final Memory: 87M/519M 
[INFO] ------------------------------------------------------------------------ 

Jak widać, różnica to prawie minuta, prawie 20-30% poprawy prędkości.

0

Początkowo powinieneś uzyskać dokładniejszą analizę swoich czasów budowy, używając czegoś takiego jak this i zidentyfikować kandydatów, którzy zajmują najwięcej czasu.

Czy testy kręcące bazą danych H2 na test? Czy pobieranie zewnętrznych plików jar zabiera trochę czasu? Dzięki temu dowiesz się, gdzie skupić się na badaniu. Stosowanie szybkich flag zwykle nie działa tak, jakby były one już domyślnie włączone, a Ty nie chcesz rezygnować z testów z flagami pominięcia.

Powiązane problemy