Wie erzwinge ich ein Maven-Update?

731

Ich habe mein bereits funktionierendes Projekt auf einen anderen Computer importiert und es begann, Abhängigkeiten herunterzuladen.

Anscheinend ist meine Internetverbindung abgestürzt und jetzt bekomme ich folgendes:

    >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

Wie zwinge ich Maven zum Update?

M4ks
quelle
Randnotiz: Ich hatte dieses Problem mit Atlassian Maven (vom Plugin SDK) und ein Upgrade auf eine neuere Version löste das Problem.
Wirone

Antworten:

1597
mvn clean install -U

-Ubedeutet, dass die Aktualisierung von Snapshot- Abhängigkeiten erzwungen wird . Release-Abhängigkeiten können auf diese Weise nicht aktualisiert werden.

lwpro2
quelle
32
Ich stimme lwpro2 zu, dies hat auch mein Problem gelöst. Nur mvn sauber zu machen ist nicht genug. Die Antwort von Navi reicht nicht aus, um das Problem zu lösen.
R. van Twisk
1
Ich glaube, dies ist komplizierter, wenn Sie artifactory verwenden und die Repository-ID "central" verwenden, da die Metadaten anscheinend nicht bereinigt werden.
ggb667
2
Dies scheint nicht die Snapshot-Abhängigkeits-Jars zu aktualisieren, sondern nur die Metadaten.
Roddy der gefrorenen Erbsen
Wenn es durch die .lastupdated-Datei verursacht wird, die aus dem letzten erfolglosen Herunterladen von Abhängigkeiten generiert wurde, funktioniert diese Methode nicht. Wir brauchen so etwas wie die Antwort von Rober Reiz
Junchen Liu
1
Ich schaue auf die Hilfe für frühere Versionen und bis zu maven 2.0.4 lautete die Beschreibung für das Flag -U: "-U, - update-snapshots Alle Snapshots unabhängig von den Repository-Richtlinien aktualisieren", beginnend mit 2.0.5, es wurde: "-U, - update-snapshots Erzwingt eine Überprüfung auf aktualisierte Releases und Snapshots in Remote-Repositorys" Und seitdem ist es so. Beide Versionen wurden 2007 veröffentlicht. Ich frage mich, ob die Antwort bearbeitet werden muss, um auch die Veröffentlichungen zu berücksichtigen.
Cleberz
93

Wenn Ihr lokales Repository im Gegensatz zu Snapshots ( -Uund --update-snapshotsnur Snapshots aktualisieren) für Release-Jars irgendwie durcheinander ist ( und nur Snapshots aktualisieren), können Sie das lokale Repo wie folgt löschen:

 mvn dependency:purge-local-repository

Sie möchten dann wahrscheinlich reinigen und erneut installieren:

 mvn dependency:purge-local-repository clean install

Viele weitere Informationen finden Sie unter https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html

FuzzyJulz
quelle
8
Sobald ich es getan habe mvn dependency:purge-local-repository, hat es einfach alle Abhängigkeiten erneut heruntergeladen, was genau das ist, was ich wollte
smac89
92

-U scheint die Aktualisierung aller Abhängigkeiten zu erzwingen.

Wenn Sie eine einzelne Abhängigkeit ohne Bereinigung aktualisieren möchten, können -USie sie einfach aus Ihrem lokalen Repo entfernen und dann erstellen.

Das folgende Beispiel für die Aktualisierung slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile
Ayush Gupta
quelle
Dies funktioniert gut, wenn Sie ein anderes Tool als maven verwenden, das auf Ihr lokales Maven-Repository verweist.
Mansoor Siddiqui
57

Alle Antworten hier haben bei mir nicht funktioniert. Ich habe die Hammermethode verwendet:

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

Das hat das Problem behoben :-)

Robert Reiz
quelle
1
@ DJ2 Dies löscht alle Dateien im .m2-verzeichnis mit dem Namen*.lastUpdated
sjngm
find ~/.m2/ -name "*.lastUpdated" -deletewürde ohne die Gefahr xargsoder rmÜberschreitung einiger Grenzen auskommen (wenn viele Dateien gefunden werden).
A Sz
45

Sie können effektiv aus tun Eclipse IDE. Natürlich, wenn Sie es verwenden.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases
Amit Shakya
quelle
1
Ich habe die Befehlszeilenversion in der Antwort von @ lwpro2 erstellt, mit der ich auf der Befehlszeile aufbauen konnte, aber dann konnte ich immer noch nicht in Eclipse erstellen. Dadurch wurde es durch Eclipse aufgebaut.
Brick
Funktioniert nur, wenn ich Eclipse nach dem Ausführen des Updates schließe und wieder öffne.
ceklock
33

Nur für den Fall, dass jemand nur die Snapshot-Abhängigkeiten des Projekts aktualisieren und kein Artefakt installieren möchte:

mvn dependency:resolve -U

Vergessen Sie nicht, Abhängigkeiten in Ihre IDE erneut zu importieren. In IDEA müssen Sie mit der rechten Maustaste auf die POM-Datei klicken und Maven -> Reimport wählen

Glaser
quelle
13

Wenn Sie sich nicht sicher sind, was sich in Ihrem lokalen Repository befindet, empfehle ich, einen Build mit der folgenden Option auszulösen:

-Dmaven.repo.local=localrepo

Auf diese Weise stellen Sie sicher, dass Sie in einer Reinraumumgebung bauen.

merejy
quelle
5
Dieser Befehl bedeutet, den Ordner localrepo als lokales Repository zu verwenden. Das ist in Ordnung für einen einzelnen Projektarbeitsbereich, aber schlecht, wenn Sie mehr als ein Projekt haben und nur wenige vom anderen abhängen. Dann ist es besser, einen vollständigen Pfad wie -Dmaven.repo.local = / data / my / localrepoDir
tgkprog
9

In meinem Fall war ich zuerst:

mvn clean install -U

Trotzdem zeigte es den gleichen Fehler, als ich das Projekt schloss und es erneut öffnete. Endlich funktioniert.

Rajeev
quelle
Ich denke, Sie könnten einfach Abhängigkeiten erneut
importieren
4

Wenn Sie die Eclipse-IDE verwenden, gehen Sie wie folgt vor :

  • Wählen Sie Projekt.
  • Drücken Sie Alt + F5. Das Fenster für Update Maven Project wird geöffnet.

  • Aktivieren - Aktualisierung von Snapshots / Releases erzwingen und auf OK klicken.

Bei Verwendung von Intellij IDE

  • Gehen Sie zu Einstellungen / Maven
  • Aktivieren Sie Schnappschüsse immer aktualisieren
patidarsnju
quelle
3

Ich habe die IntelliJ IDE verwendet und hatte ein ähnliches Problem. Um dieses Problem zu lösen, habe ich auf der Registerkarte Maven auf "Quellen generieren und Ordner für alle Projekte aktualisieren" geklickt.

Geben Sie hier die Bildbeschreibung ein

Willyan
quelle
2

Ich habe den Fehler in einem anderen Kontext. Meine Lösung könnte also für andere nützlich sein, die sich mit der Frage auseinandersetzen:

Das Problem: Ich habe das lokale Repository auf einen anderen Computer kopiert, der keine Verbindung zu einem speziellen Repository hat. Also versuchte Maven, die Artefakte mit dem ungültigen Repository zu vergleichen.

Meine Lösung: Entfernen Sie die Dateien _maven.repositories.

Matthias M.
quelle
2

Dies ist eines der nervigsten Dinge an Maven. Für mich passiert Folgendes: Wenn ich eine Abhängigkeit hinzufüge, die mehr und mehr Abhängigkeiten anfordert, aber eine langsame Verbindung hat, stoppt sie scheinbar beim Herunterladen und beim Timeout. Während das Zeitlimit überschritten wird, werden alle noch nicht abgerufenen Abhängigkeiten mit Platzhaltern im .m2-Cache markiert, und Maven nimmt sie (nie) auf, es sei denn, ich entferne den Platzhaltereintrag (wie angegeben) aus dem Cache, indem ich ihn entferne.

Soweit ich es sehe, hat Maven oder genauer gesagt das Eclipse Maven-Plugin einen Fehler in dieser Hinsicht. Jemand sollte dies melden.

Martin Kersten
quelle
2

Sie müssen Ihre settings.xml-Datei unter überprüfen <maven_home>/conf Verzeichnis .

Ashish Nariyal
quelle
1

Ich habe den gleichen Fehler mit der Abhängigkeit von Android-Maps-Utils. Die Verwendung eines aar-Typ-Pakets im Abhängigkeitsabschnitt löst mein Problem. Standardmäßig ist der Typ jar, daher wird möglicherweise überprüft, welche Art von Abhängigkeit im Repository heruntergeladen wird.

zhen_khokh
quelle
1

So beheben Sie dieses Problem mit Eclipse:

1) Fügen Sie die folgende Abhängigkeit in Maven pom.xml hinzu und speichern Sie die Datei 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) Gehen Sie zu Projekt >> Maven >> Projekt aktualisieren

Wählen Sie das Projekt aus und klicken Sie auf OK.

3) Optionaler Schritt, wenn er erst in Schritt 2 behoben wurde, führen Sie den folgenden Schritt nach Schritt 1 aus

Gehen Sie zu Projekt >> Maven >> Projekt aktualisieren >> Aktivieren Sie das Kontrollkästchen 'Aktualisierung von Snapshots / Releases erzwingen'.

Wählen Sie das Projekt aus und klicken Sie auf OK.

Tarun11
quelle
1

Frühere Versionen von maven haben die Überprüfung auf fehlende Releases nicht erzwungen bei Verwendung von -U mit mvn clean install erzwungen, sondern nur die Snapshots, obwohl die neuere Version dies unterstützt.

Für jemanden, der immer noch mit der vorherigen Version zu kämpfen hat, kann Folgendes hilfreich sein:

Unter Windows:

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

Unter Linux:

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

Wenn maven aus irgendeinem Grund keine Abhängigkeiten herunterladen kann (Konnektivität / nicht vorhanden usw.), wird in der Datei dependency-name.lastUpdate im entsprechenden Ordner unter dem Verzeichnis $ home / .m2 das ".error = Artefakt konnte nicht übertragen werden" hinzugefügt. Durch das Entfernen dieser Dateien wird maven gezwungen, die Abhängigkeiten erneut abzurufen.

ankidaemon
quelle
0

Es ist wichtig hinzuzufügen, dass der Hauptunterschied beim Ausführen mvn mit -U und ohne -U darin besteht, dass -UIhre lokalen SNAPSHOT-Jars mit Remote-SNAPSHOT-Jars überschrieben werden.

Lokale SNAPSHOT-Jars, die aus lokalen erstellt mvn installwurden, wenn Sie andere Module Ihres Projekts haben, die Jars generieren.

Johnny
quelle
0

-U wird verwendet, um Update Maven Repo zu erzwingen. Verwenden

mvn -U clean install
Sanjeev Guglani
quelle
Dies ist genau die gleiche Antwort wie die akzeptierte Antwort. Gegeben 6 Jahre zuvor ...
Kerwin Sneijders
@KerwinSneijders Ich hatte vor 2 Jahren eine Antwort hinzugefügt. Die akzeptierte Antwort lieferte keine Informationen darüber, was -U hier tut
Sanjeev Guglani
Soweit ich das beurteilen kann, enthielt die akzeptierte Antwort diese Informationen vom Tag der Veröffentlichung an. (14. März 12). Und selbst wenn dies nicht der Fall ist, werden diese Informationen besser in einem Kommentar unter den akzeptierten Antworten veröffentlicht, da es sich nicht um eine Antwort handelt, sondern um zusätzliche Informationen
Kerwin Sneijders,
0

Ich habe alle Antworten hier ausprobiert, aber nichts schien zu funktionieren. Zuerst wurde mein Computer neu gestartet und dann ausgeführt mvn clean install -U. Das hat mein Problem gelöst.

Gelo
quelle
0

Maven lädt alle Abhängigkeiten Ihres Projekts in Ihr lokales Repo (Ordner .m2) herunter. Aufgrund des Internets, das Probleme mit Ihrem lokalen Repo verursacht, ist Ihr Projekt mit Problemen konfrontiert. Ich bin nicht sicher, ob dies Ihnen sicherlich helfen wird oder nicht, aber Sie können versuchen, alle Dateien im Repository-Ordner im Ordner .m2 zu löschen. Da das lokale Repo nichts enthalten würde, wäre maven gezwungen, die Abhängigkeiten erneut herunterzuladen, wodurch ein Update erzwungen würde. Im Allgemeinen befindet sich der Ordner .m2 unter c: users: [Benutzername]:. M2

Ketan R.
quelle
-1

Ich hatte dieses Problem aus einem anderen Grund. Ich ging zum Maven-Repository https://mvnrepository.com und suchte nach der neuesten Version von Spring Core, die zu diesem Zeitpunkt 5.0.0.M3 war. Das Repository zeigte mir diesen Eintrag für meine 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>

Naiver Dummkopf, ich bin, ich nahm an, dass der Kommentar mir sagte, dass sich das Glas im Standard-Repository befindet.

Nach vielem Headbangen sah ich jedoch eine Notiz direkt unter der XML-Datei mit der Aufschrift "Hinweis: Dieses Artefakt befindet sich im öffentlichen Repository von Alfresco ( https://artifacts.alfresco.com/nexus/content/repositories/public/ )." ""

Der Kommentar im XML ist also völlig irreführend. Das Glas befindet sich in einem anderen Archiv, weshalb Maven es nicht finden konnte!

user1208639
quelle
-3

Mit dem folgenden Befehl können wir erzwingen, dass das neueste Update der Version und des Snapshot-Repositorys abgerufen wird:

mvn --update-snapshots clean install
Sopheak Seng
quelle
12
Dies ist genau die gleiche Antwort wie die akzeptierte Antwort. -U ist die Kurzform von --update-snapshots.
Roddy der gefrorenen Erbsen
-3

Ich hatte den gleichen Fehler und das Laufen mvn install -Uund dann Laufen mvn installfunktionierte für mich.

rich_markle
quelle
10
Bitte poste keine Antworten "die in allen anderen Antworten erwähnte Sache hat auch für mich funktioniert" .
Kryger
-4

Ich bin kürzlich darauf gestoßen und habe durch Ausführen des Folgenden alle Probleme behoben

mvn -fae install
Hugh Brien
quelle
5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueEs scheint eine seltsame Art, nicht aktualisierte externe Abhängigkeiten zu beheben.
Donatello
-5

mvn clean install -Ufunktioniert nicht Jedoch mvn -U cleangefolgt von mvn clean installtut.

mroman
quelle