2015-03-12 17 views
5

W pomocą wiersza polecenia, widzę, że Maven „kontrole” aktualizacje:maven: co naprawdę robi "-U, - update-snapshots"?

-U,--update-snapshots     Forces a check for updated 
             releases and snapshots on remote 
             repositories 

Jednak większość pytań na przepełnienie stosu sugerować, że siły to opcja Maven, aby zaktualizować. Czy to oznacza, że ​​wymusza ponowne pobieranie zależności?

np. https://stackoverflow.com/a/9697970/1119779

+0

Czy moje wyjaśnienie było dla Ciebie przydatne? – Alexander

+0

tak, wyjaśnia, że ​​zostało ukończone. dzięki – imagineerThat

Odpowiedz

4

Jeśli nie używać -U, Maven może buforować wyniki - nawet jeśli zależność nie można znaleźć (np ponieważ nexus [lub podobnie] był niedostępny, źle skonfigurowany, nie zawierają zależność [jeszcze] lub cokolwiek).

Jeśli tak jest w tym przypadku. Maven podąża za repozytorium updatePolicy, który mówi, jak często (jeśli w ogóle) maven sprawdza, czy zależność została zaktualizowana. Domyślnie jest to daily, więc jeśli błąd temp powoduje, że użytkownik nie pobierze zależności, może minąć jeden dzień, zanim maven spróbuje ponownie. -U nadpisuje to i przekazuje je do sprawdzi teraz.

-U nie pobiera ponownie zależności, jeśli została już pobrana i jeśli suma kontrolna jest taka sama! Sprawdza tylko sumę kontrolną.

BTW: Maven używa pliku sygnatury czasowej, który ma taką samą nazwę jak zależność + ".lastUpdated", aby wiedzieć, kiedy zależność została ostatnio sprawdzona na którym serwerze. Na przykład. ~/.m2/repository/org/springframework/spring-webmvc/3.1.2.RELEASE/spring-webmvc-3.1.2.RELEASE.jar.lastUpdated

Przykład updatePolicy:

<repositories> 
    <repository> 
    <releases> 
     <enabled>false</enabled> 
     <updatePolicy>always</updatePolicy> 
    </releases> 
    <snapshots> 
     <enabled>true</enabled> 
     <updatePolicy>never</updatePolicy> 
    </snapshots> 
    <!-- ... --> 
    </repository> 
    <!-- ... --> 
</repositories> 

Patrz http://maven.apache.org/pom.html#Repositories celu uzyskania dalszych informacji na temat updatePolicy.

+0

Aby przyspieszyć działanie, chciałbym przełączyć się na używanie mvn -U, aby zaktualizować nasze lokalne repozytorium, zamiast usuwać nasze repozytorium m2 przed każdą kompilacją. Czy mogę ufać, że nie zmienia to zachowania naszych kompilacji? – imagineerThat

+0

Nie aktualizuje całego lokalnego repozytorium m2, ale wymusza sprawdzenie, czy są jakieś aktualizacje tych zależności, z których korzysta twój projekt. BTW: powinno tak być tylko w przypadku zależności SNAPSHOT - zwolnione artefakty mafii nie powinny być zmieniane po ich wydaniu! – Alexander

1

Należy dodać, że wykonanie mvn -U spowoduje przesłonięcie lokalnych słoików SNAPSHOT za pomocą zdalnych słoików SNAPSHOT.

Bez argumentu -U, lokalne SNAPSHOTS nie zostaną zastąpione.