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.

volni
źródł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

Ali Tokmen
źródło
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;)

Ryan Angilly
źródło
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
Richard
źródło
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.

skyfish
źródło
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

nanosoft
źródło
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ć.

ArpitBora
źródło
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

crowne
źródło
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.

smac89
źródło
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
Bart den Haak
źródło
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.

Saurabh Oza
źródło
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

Tharindu Sathischandra
źródło
-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)

Abhishek Nandgaonkar
źródło
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

SagaramVijay
źródło
2
Zakłada to użycie jakiegoś IDE, założenie nie wspierane przez pytanie, a nawet nie sprecyzowałeś, jakie IDE!
Phil