Jak wymusić aktualizację maven?


730

Zaimportowałem już działający projekt na inny komputer i zaczął on pobierać zależności.

Najwyraźniej moje połączenie internetowe uległo awarii i teraz otrzymuję:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

Jak zmusić maven do aktualizacji?


Uwaga dodatkowa: Miałem ten problem z Atlassian Maven (z wtyczki SDK) i aktualizacja do nowszej wersji rozwiązała problem.
— Wirone,

Odpowiedzi:


1596
mvn clean install -U

-Uoznacza wymuś aktualizację zależności migawki . Zależności wersji nie mogą być aktualizowane w ten sposób.


32
Zgadzam się z lwpro2, to również rozwiązało mój problem. Samo czyszczenie mvn nie wystarczy. Odpowiedź Navi nie wystarczy, aby rozwiązać problem.
— R. van Twisk

1
Uważam, że jest to bardziej skomplikowane, jeśli korzystasz z artefaktów i używasz identyfikatora repozytorium jako „centralny”, ponieważ metadane najwyraźniej nie są czyszczone.
— ggb667

2
Wydaje się, że to nie aktualizuje słoików zależności migawki, tylko metadane.
— Roddy z

jeśli jest to spowodowane przez .lastupdated plik, wygenerowany z ostatniego nieudanego pobrania zależności, ta metoda nie będzie działać, potrzebujemy czegoś takiego jak odpowiedź
— Robera Reiza

1
Patrzę na pomoc dla poprzednich wersji i do wersji maven 2.0.4, opis flagi -U brzmiał: „-U, - update-snapshots Aktualizuj wszystkie migawki niezależnie od zasad repozytorium” zaczynając od 2.0.5, zmieniło się w: „-U, - snapshoty aktualizacji Wymusza sprawdzenie zaktualizowanych wersji i migawek w zdalnych repozytoriach” I od tego czasu tak było. Obie wersje zostały wydane w 2007 roku. Zastanawiam się, czy odpowiedź musi być edytowana, aby uwzględnić również wydania?
— cleberz

93

Jeśli Twoje lokalne repozytorium jest w jakiś sposób zepsute dla słoików wydania w przeciwieństwie do migawek ( -Ui --update-snapshotstylko aktualizuj migawki), możesz wyczyścić lokalne repozytorium, wykonując następujące czynności:

 mvn dependency:purge-local-repository

Prawdopodobnie chcesz następnie wyczyścić i zainstalować ponownie:

 mvn dependency:purge-local-repository clean install

Dużo więcej informacji dostępnych na https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html


8
Jak tylko to zrobiłem mvn dependency:purge-local-repository, po prostu ponownie
— pobrałem

92

-U wydaje się wymuszać aktualizację wszystkich zależności.

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

Poniższy przykład dotyczy aktualizacji slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile

Działa to dobrze, jeśli używasz innego narzędzia niż maven, które odwołuje się do lokalnego repozytorium maven.
— Mansoor Siddiqui

57

Wszystkie odpowiedzi tutaj nie działały dla mnie. Użyłem metody młota:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

To naprawiło problem :-)


@ DJ2 Spowoduje to usunięcie wszystkich plików z .m2katalogu o nazwie*.lastUpdated
— sjngm,

find ~/.m2/ -name "*.lastUpdated" -deleteobejdzie się bez niebezpieczeństwa xargslub rmprzekroczenia pewnych limitów (jeśli znaleziono wiele plików).
— A Sz

45

Możesz to zrobić skutecznie od Eclipse IDE. Oczywiście, jeśli go używasz.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases

1
Zrobiłem wersję wiersza poleceń w odpowiedzi @ lwpro2, co pozwoliło mi budować w wierszu poleceń , ale nadal nie mogłem budować w Eclipse. Dzięki temu można go zbudować za pomocą Eclipse.
— Cegła

Działa dla mnie tylko wtedy, gdy zamknę i ponownie otworzę Eclipse po wykonaniu aktualizacji.
— ceklock

33

Na wypadek, gdyby ktoś chciał tylko zaktualizować zależności migawki projektu i nie chciał instalować artefaktu:

mvn dependency:resolve -U

Nie zapomnij ponownie zaimportować zależności w swoim IDE. W IDEA musisz kliknąć prawym przyciskiem myszy plik pom i wybrać Maven -> Reimport


13

Jeśli nie masz pewności, co znajduje się w twoim lokalnym repozytorium, zalecamy uruchomienie kompilacji z opcją:

-Dmaven.repo.local=localrepo

W ten sposób zapewnisz możliwość budowania w pomieszczeniu czystym.


5
to polecenie oznacza użycie folderu localrepo jako lokalnego repozytorium. jest to w porządku dla obszaru roboczego pojedynczego projektu, ale złe, jeśli masz więcej niż jeden projekt, a kilka zależy od drugiego. to lepiej podać pełną ścieżkę, np. -Dmaven.repo.local = / data / my / localrepoDir
— tgkprog

9

W moim przypadku najpierw zrobiłem:

mvn clean install -U

Nadal wyświetlał ten sam błąd, a następnie zamknąłem projekt i ponownie go otworzyłem. Wreszcie działało.


Myślę, że mógłbyś po prostu ponownie
— zaimportować

4

Jeśli używasz środowiska IDE Eclipse, wówczas:

  • Wybierz Projekt.
  • Naciśnij alt + F5, pojawi się okno aktualizacji projektu Maven.

  • Sprawdź - wymuś aktualizację migawek / wydań i kliknij OK.

Jeśli używasz Intellij IDE

  • przejdź do ustawień / Maven
  • zaznacz Zawsze aktualizuj migawki

3

Użyłem IntelliJ IDE i miałem podobny problem. Aby rozwiązać, kliknąłem w „Generuj źródła i aktualizuj foldery dla wszystkich projektów” w zakładce Maven.

wprowadź opis zdjęcia tutaj


2

Mam błąd w innym kontekście. Więc moje rozwiązanie może być przydatne dla innych, którzy natkną się na pytanie:

Problem: skopiowałem lokalne repozytorium na inny komputer, który nie ma połączenia ze specjalnym repozytorium. Więc maven próbował sprawdzić artefakty pod kątem nieprawidłowego repozytorium.

Moje rozwiązanie: Usuń pliki _maven.repositories.


2

To jedna z najbardziej denerwujących rzeczy w Maven. Dla mnie dzieje się tak: Jeśli dodam zależność żądającą większej liczby zależności i coraz więcej, ale mam wolne połączenie, wydaje się, że zatrzymam się podczas pobierania i przekroczenia limitu czasu. Podczas przekroczenia limitu czasu wszystkie zależności, które nie zostały jeszcze pobrane, są oznaczone symbolami zastępczymi w pamięci podręcznej .m2, a Maven nie (nigdy) nie odbierze, chyba że usunę wpis zastępczy z pamięci podręcznej (jak wspomniano inaczej), usuwając go.

Tak dalece, jak to widzę, Maven lub dokładniej, wtyczka Eclipse Maven ma błąd w tym zakresie. Ktoś powinien to zgłosić.



1

Mam ten sam błąd związany z zależnością android-map-utils. Korzystanie z pakietu typu AAR w sekcji zależności rozwiązuje mój problem. Domyślnie typem jest jar, więc można sprawdzić, jaki typ zależności w repozytorium jest pobierany.


1

Aby rozwiązać ten problem z Eclipse:

1) Dodaj zależność poniżej w Maven pom.xml i zapisz plik pom.xml.

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2) Przejdź do projektu >> Maven >> Zaktualizuj projekt

wybierz projekt i kliknij OK.

3) Krok opcjonalny, jeśli nie zostanie rozwiązany do kroku 2, to wykonaj krok poniżej po wykonaniu kroku 1

Przejdź do projektu >> Maven >> Zaktualizuj projekt >> zaznacz pole wyboru „Wymuś aktualizację migawek / wydań”

wybierz projekt i kliknij OK.


1

Poprzednie wersje maven nie wymuszały sprawdzania brakujących wersji gdy były używane -U z czystą instalacją mvn, tylko migawki, chociaż nowsza wersja to obsługuje.

Dla kogoś, kto wciąż boryka się z poprzednią wersją, pomocne może być:

W systemie Windows:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

W systemie Linux:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

Ilekroć maven nie może pobrać zależności z jakiegokolwiek powodu (łączność / nie istnieje itp.), Doda „.error = Could not transfer artefact” w pliku dependence-name.lastUpdate w odpowiednim folderze w katalogu $ home / .m2. Usunięcie tych plików zmusi maven do ponownego pobrania zależności.


0

Ważne jest, aby dodać, że główna różnica w działaniu mvn z -U i bez -U jest taka-U że zastąpi lokalne słoiki SNAPSHOT zdalnymi słojami SNAPSHOT.

Lokalne słoiki SNAPSHOT utworzone z lokalnych mvn installw przypadku, gdy masz inne moduły swojego proj, które generują słoiki.


0

-U służy do wymuszenia aktualizacji maven Repo. Posługiwać się

mvn -U clean install

To jest dokładnie taka sama odpowiedź, jak odpowiedź zaakceptowana. Biorąc pod uwagę 6 lat wcześniej ...
— Kerwin Sneijders

@KerwinSneijders Dodałem odpowiedź 2 lata temu, zaakceptowana odpowiedź nie zawierała informacji o tym, co -U tutaj robi
— Sanjeev Guglani

O ile mogę stwierdzić, zaakceptowana odpowiedź zawierała te informacje od dnia, w którym została opublikowana. (14 marca 12). A nawet jeśli nie, ta informacja jest lepiej opublikowana w komentarzu poniżej zaakceptowanych odpowiedzi, ponieważ nie jest to odpowiedź, ale dodatkowe informacje
— Kerwin Sneijders

0

Próbowałem tutaj wszystkich odpowiedzi, ale wydawało się, że nic nie działa. Najpierw uruchomiłem ponownie komputer, a następnie uruchomiłem mvn clean install -U. To rozwiązało mój problem.


0

To, co robi maven, pobiera wszystkie zależności projektu do lokalnego repozytorium (folder .m2). Ponieważ Internet powoduje problemy z lokalnym repozytorium, projekt napotyka problemy. Nie jestem pewien, czy to z pewnością ci pomoże, ale możesz spróbować usunąć wszystkie pliki w folderze repozytorium w folderze .m2. Ponieważ w lokalnym repozytorium nie będzie niczego, maven będzie zmuszony ponownie pobrać zależności, co wymusi aktualizację. Ogólnie folder .m2 znajduje się pod adresem c: users: [nazwa użytkownika] :. m2


-1

Miałem ten problem z innego powodu. Poszedłem do repozytorium maven https://mvnrepository.com, szukając najnowszej wersji Spring Core, która w tym czasie miała 5.0.0.M3 / Repozytorium pokazało mi ten wpis dla mojego pom.xml:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

Jestem naiwnym głupcem, założyłem, że komentarz mówi mi, że słoik znajduje się w domyślnym repozytorium.

Jednak po wielu kłótniach zobaczyłem notatkę tuż pod xml z napisem „Uwaga: ten artefakt znajduje się w publicznym repozytorium Alfresco ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) „

Tak więc komentarz w XML jest całkowicie mylący. Słoik znajduje się w innym archiwum, dlatego Maven nie mógł go znaleźć!


-3

Możemy wymusić pobranie najnowszej aktualizacji repozytorium wydania i migawki za pomocą poniższego polecenia:

mvn --update-snapshots clean install

12
To jest dokładnie taka sama odpowiedź, jak odpowiedź zaakceptowana. -U to krótka forma migawek --update.
— Roddy z

-3

Miałem ten sam błąd i bieganie, mvn install -Ua następnie bieganie mvn installdziałało dla mnie.


10
Proszę nie zamieszczać odpowiedzi „rzecz wymieniona we wszystkich pozostałych odpowiedziach również dla mnie zadziałała” .
— kryger

-4

Natknąłem się na to niedawno i uruchomienie następującego rozwiązało wszystkie problemy

mvn -fae install

5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueWydaje się to dziwnym sposobem naprawiania nieaktualizowanych zewnętrznych zależności.
— Donatello,

-5

mvn clean install -Unie działa Jednak mvn -U cleanpo nim następuje mvn clean install.

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.