Wymuś ponowne pobranie zależności wydania przy użyciu Maven


135

Pracuję nad projektem z zależnością X. X z kolei zależy od Y.

Kiedyś wyraźnie umieszczałem Y w pliku pom mojego projektu. Jednak nie był używany i aby uczynić rzeczy czystszymi, zamiast tego dodałem go do X's pom jako zależność. X jest oznaczony jako zależność od wydania.

Problem polega na tym, że po usunięciu Y z pom mojego projektu i dodaniu go do pom X, mój projekt go nie odbiera mvn -U clean package. Wiem, że -U aktualizuje migawki, ale nie wydania.

Więc bez usuwania katalogu ~ / .m2 / repository, jak mogę wymusić ponowne pobranie pom X's? Próbowałem też biegać dependency:purge-local-repositoryi to też nie działało.


Oznaczyłeś pytania jako „maven-2”. Opcja -U została dodana w Maven 3, aby rozwiązać ten problem. Sugerowałbym aktualizację.
Mark O'Connor

Z punktu widzenia metodologii, jeśli zmienisz Xpom, to powinno to stanowić nowe wydanie, nawet jeśli jest to tylko zmiana numeru patcha: 1.3-> 1.3.1. To wyeliminowałoby ten problem od samego początku.
jpaugh

Jednak nadal można mieć podobne problemy z migawkami, więc dobrze jest mieć kilka odpowiedzi.
jpaugh

Odpowiedzi:


165

Nie można zmusić Mavena do ponownego pobierania zależności, ale zamiast tego można usunąć zależności, które zostały niepoprawnie pobrane przy użyciu mvn dependency:purge-local-repository

Zobacz: http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html


11
Czy to nie jest to samo?
Svish

2
Nie wymaga dostępu do systemu plików, co może stanowić problem, jeśli konfigurujesz tylko zadania kompilacji (na przykład dla systemu CI).
Oliver Drotbohm

2
Jeśli uruchomionych jest wiele projektów mvn dependency:purge-local-repository clean package, jeden projekt może usunąć tę samą zależność w repozytorium lokalnym, podczas gdy inny projekt jest uruchomiony kompilacji. Jak ominąć?
vikyd

55

Właśnie usunąłem moje repozytorium ~ / .m2 / i to wymusiło ponowne pobranie;)


1
To pomaga w ostateczności, miałem projekt, w którym zaćmienie i maven byli trochę „zdezorientowani”. Po prostu usunięcie folderu .m2 sprawiło, że projekt został skompilowany i działał poprawnie.
Leonardo

5
Możliwe jest również selektywne usuwanie zależności, o których wiesz, że wymagają odświeżenia z wnętrza repozytorium. Ręczne czyszczenie, jeśli chcesz.
jpaugh

41

Myślę, że poniższe polecenie może ci pomóc!


mvn -U clean install

4
zwolnij zależność, używając Mavena w pytaniu. Nie, to mógłby być lepszy komentarz.
Naman

31

Dzięki odpowiedzi Ali Tokmen. Udało mi się wymusić usunięcie określonej lokalnej zależności za pomocą następującego polecenia:

mvn dependency:purge-local-repository -DmanualInclude=com.skyfish:utils

Dzięki temu usuwa utilsz mojego repozytorium .m2 / i zawsze ponownie pobiera utilszależność JAR po uruchomieniu mvn clean install.


1
Po prostu potrzebowałem sposobu, aby zmusić mavena do ponownego pobrania zależności. To jedyna odpowiedź, która faktycznie to robi, podczas gdy inne odpowiedzi sugerują usunięcie wszystkiego. Dziękuję
smac89

14

Kliknij prawym przyciskiem myszy Projekt -> Maven -> Aktualizuj projekt i zaznacz pola wyboru jak na zrzucie ekranu. Zaktualizuje również wersje :)

wprowadź opis obrazu tutaj


5
Byłoby miło wiedzieć, jak zaimplementowali tę część „/ Wydania”.
Ulises Layera

Dzięki za to, czego potrzebowałem.
JamesG,

12
mvn clean install -U

-U oznacza wymuszenie aktualizacji zależności.

Jeśli chcesz zaktualizować pojedynczą zależność bez clean lub -U, możesz po prostu usunąć ją z lokalnego repozytorium, a następnie skompilować.


Ponownie powoduje to tylko ponowne pobranie zależności SNAPSHOT.
Zardoz89

6

Kiedy dodałeś go do X, powinieneś zwiększyć numer wersji X, np. X-1.2
Następnie X-1.2 powinien zostać zainstalowany / wdrożony i powinieneś zmienić zależność projektów od X aby być zależnym od nowej wersji X-1.2


6

Jeśli znasz identyfikator grupy X, możesz użyć tego polecenia, aby ponownie pobrać wszystkie Xi ich zależności

mvn clean dependency:purge-local-repository -DresolutionFuzziness=org.id.of.x

Robi to samo, co inne odpowiedzi, które proponują użycie dependency:purge-local-repository, ale tylko usuwa i ponownie pobiera wszystko, co dotyczy X.


4

Jeśli naprawdę chcesz wymusić pobranie wszystkich zależności, możesz spróbować ponownie zainicjować całe repozytorium maven. Podobnie jak w tym artykule już opisanym, możesz użyć:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

3

Po prostu usuń ~ / .m2 / repository ..... / current_path, gdzie nadchodzi nieprawidłowy LOC, ponieważ wymusza ponowne pobranie usuniętych plików jar. Nie usuwaj całego folderu repozytorium, zamiast tego usuń określony folder, z którego nadchodzi błąd.


0

Usunięcie ~/.m2/repositoryrozwiąże Twój problem. Ale jeśli nadal chcesz zachować starą ~/.m2/repository, możesz po prostu tymczasowo zmienić lokalną ścieżkę maven.

Jeśli pracujesz na IntelliJ, po prostu przejdź do Maven Settings i zmień ścieżkę lokalnego repozytorium na inne. Może być konieczne zaznaczenie pola wyboru zastąpienia obok.

wprowadź opis obrazu tutaj


-1

Większość odpowiedzi udzielonych powyżej rozwiązałoby problem.

Ale jeśli używasz IntelliJ i chcesz, aby po prostu naprawił to automatycznie, przejdź do Ustawień Mavena.

Kompilacja, wykonanie, wdrożenie -> Narzędzia kompilacji -> Maven

wprowadź opis obrazu tutaj

Wyłącz pracę w trybie offline

Włącz opcję Zawsze aktualizuj migawki (przełącz w razie potrzeby)


1
Byłbym wdzięczny, gdybyś mógł również podzielić się powodem przegłosowania, gdy jesteś przy tym. Dziękuję Ci.
Abhishek Nandgaonkar

1
Prawdopodobnie dlatego, że migawki nie są wydaniami, więc nie rozwiązuje to problemu.
soru

-2

Idź do ścieżki budowania ... usuń istniejącą bibliotekę Maven u dodaną ... kliknij dodaj bibliotekę ... kliknij zależności zarządzane maven ... następnie kliknij ustawienia projektu maven ... zaznacz pole wyboru rozwiąż zależności maven ... to pobierze wszystko zależności maven


2
Zakłada to użycie jakiegoś IDE, założenie nie wspierane przez pytanie, a nawet nie sprecyzowałeś, jakie IDE!
Phil
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.