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?

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

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

FuzzyJulz
źródło
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
Ayush Gupta
źródło
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 :-)

Robert Reiz
źródło
@ 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
Amit Shakya
źródło
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

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

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

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

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

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

Martin Kersten
źródło
2

Musisz sprawdzić plik settings.xml w <maven_home>/confkatalogu.

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

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

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

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

Jasio
źródło
0

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

mvn -U clean install
Sanjeev Guglani
źródło
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.

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

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

użytkownik1208639
źródło
-3

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

mvn --update-snapshots clean install
sopheak Seng
źródło
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.

rich_markle
źródło
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
Hugh Brien
źródło
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.

mroman
źródło