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.