Pracuję nad dość dużym projektem Mavena. Mamy prawdopodobnie około 70 pojedynczych artefaktów, które są z grubsza podzielone na dwie biblioteki współdzielonego kodu i może dziesięć aplikacji, które ich używają. Wszystkie te elementy znajdują się w przestrzeni nazw com.mycompany.*
.
Przez większość czasu korzystamy z kompilacji migawek. Tak więc, aby wykonać pełną kompilację aplikacji, mógłbym najpierw zbudować projekty bibliotek, aby zostały zainstalowane w moim lokalnym repozytorium (jak powiedzmy mycompany-libname-2.4-SNAPSHOT.jar
).
Problem w tym, że kiedy zaczynam budować aplikacje. Z jakiegoś powodu Maven chce sprawdzić dwa główne repozytoria publiczne (maven-net-repo i java-net-repo) pod kątem aktualizacji wszystkich mycompany-*-SNAPSHOT.jar
artefaktów. Oczywiście ich tam nie ma i wszystko w końcu wraca do wersji, które właśnie zbudowałem w moim lokalnym repozytorium, ale chciałbym, aby Maven przestał to robić, ponieważ (a) sprawia, że czuję się jak zła sieć. Obywatel za ciągłe sprawdzanie tych repozytoriów pod kątem rzeczy, których nigdy tam nie będzie, oraz (b) dodaje niepotrzebne i irytujące opóźnienia sieciowe do mojego procesu kompilacji.
Przez większość czasu korzystałem z Mavena w trybie offline, aby obejść ten problem, ale nie jest to idealne rozwiązanie, ponieważ czasami zależność od biblioteki publicznej zostanie zaktualizowana. Poszukuję więc rozwiązania, które spowoduje, że Maven nie będzie sprawdzał aktualizacji z danych repozytoriów pod kątem artefaktów spełniających określone kryteria - w tym przypadku byłbym szczęśliwy, gdyby Maven zignorował wersje SNAPSHOT lub artefakty, które były w com.mycompany
nazw.
źródło
Możesz także użyć
-o
lub--offline
w wierszu poleceń mvn, co spowoduje przełączenie mavena w „tryb offline”, aby nie sprawdzał dostępności aktualizacji. Otrzymasz ostrzeżenie, że nie możesz pobrać zależności, które nie znajdują się jeszcze w lokalnym repozytorium, ale nic wielkiego.źródło
Coś, co jest teraz dostępne również w Maven, jest
lub w skrócie
źródło
set offline := true
w sesji luboffline := true
wbuild.sbt
.nsu
opcja jest uszkodzona w wersji 3.0.3 (patrz MNG-5064 ). Aby niezawodnie korzystać z tej opcji, może być konieczna aktualizacja do co najmniej wersji 3.0.4 lub 3.0.5Aktualizacja: prawdopodobnie powinienem był zacząć od tego, ponieważ twoje projekty to SNAPSHOT. Jest to część semantyki SNAPSHOT, którą Maven będzie sprawdzać dostępność aktualizacji dla każdej kompilacji. Bycie SNAPSHOTem oznacza, że jest niestabilny i podlega zmianom, dlatego należy sprawdzać aktualizacje. Warto jednak zauważyć, że Maven super POM konfiguruje centralę tak, aby mieć wyłączone migawki, więc Maven nie powinien nigdy sprawdzać aktualizacji dla SNAPSHOTów na centralnym, chyba że nadpisałeś to we własnym pom / ustawieniach.
Możesz skonfigurować Mavena do korzystania z serwera lustrzanego dla centralnego repozytorium, co spowoduje przekierowanie wszystkich żądań, które normalnie trafiłyby do centralnego, do twojego wewnętrznego repozytorium.
W pliku settings.xml można dodać coś takiego, aby ustawić swoje wewnętrzne repozytorium jako serwer lustrzany dla centralnego:
Jeśli używasz menedżera repozytorium, takiego jak Nexus, do wewnętrznego repozytorium. Możesz skonfigurować repozytorium proxy dla serwera proxy centralnego, tak aby wszelkie żądania, które normalnie trafiałyby do centralnego, są zamiast tego wysyłane do repozytorium proxy (lub grupy repozytoriów zawierającej proxy), a kolejne żądania są buforowane w wewnętrznym menedżerze repozytoriów. Możesz nawet ustawić limit czasu pamięci podręcznej proxy na -1, więc nigdy nie będzie żądał zawartości z centrali, która jest już w repozytorium proxy.
Bardziej podstawowym rozwiązaniem, jeśli pracujesz tylko z lokalnymi repozytoriami, jest ustawienie updatePolicy dla centralnego repozytorium na „nigdy”, co oznacza, że Maven będzie sprawdzać tylko artefakty, których nie ma jeszcze w lokalnym repozytorium. W razie potrzeby można to zmienić w wierszu poleceń, używając przełącznika -U, aby zmusić Mavena do sprawdzania dostępności aktualizacji.
Skonfigurowałbyś repozytorium (w swoim pom lub profilu w settings.xml) w następujący sposób:
źródło
updatePolicy
Elementem idzie podsnapshots
lubreleases
elementu. Zobacz: maven.apache.org/settings.htmlBardzo prosty :
W pliku nadrzędnym Super POM lub setting.xml użyj pliku
To moje wskazówki
źródło
Miałem kłopoty podobne do tego,
Ustawienie updatePolicy na „nigdy” nie zadziałało. Usunięcie tego repozytorium było sposobem, w jaki to rozwiązałem. ps: Śledziłem ten samouczek dotyczący usług internetowych (przy okazji, prawdopodobnie najlepszy samouczek dla ws dla java)
źródło