Erzwingen Sie den erneuten Download der Release-Abhängigkeit mithilfe von Maven


134

Ich arbeite an einem Projekt mit Abhängigkeit X. X wiederum hängt von Y ab.

Ich habe Y explizit in den Pom meines Projekts aufgenommen. Es wurde jedoch nicht verwendet und um die Dinge sauberer zu machen, habe ich es stattdessen als Abhängigkeit zu X 'Pom hinzugefügt. X ist als Release-Abhängigkeit markiert.

Das Problem ist, dass mein Projekt nach dem Entfernen von Y aus dem Pom meines Projekts und dem Hinzufügen zu X's Pom es nicht aufgreift mvn -U clean package . Ich kenne -U Update-Snapshots, aber keine Releases.

Wie kann ich also einen erneuten Download von Xs POM erzwingen , ohne das Verzeichnis ~ / .m2 / repository zu löschen ? Außerdem habe ich versucht zu laufen dependency:purge-local-repositoryund es hat auch nicht funktioniert.


Sie haben die Fragen als "maven-2" markiert. Die Option -U wurde in Maven 3 hinzugefügt, um dieses Problem zu lösen. Ich würde ein Upgrade vorschlagen.
Mark O'Connor

Nur aus methodischer Sicht sollte es sich bei einer Änderung Xdes POM um eine neue Version handeln, auch wenn es sich nur um eine Änderung der Patch-Nummer handelt: 1.3-> 1.3.1. Das würde dieses Problem also von Anfang an beseitigen.
Jpaugh

Es ist jedoch immer noch möglich, ähnliche Probleme mit Schnappschüssen zu haben. Daher ist es gut, einige Antworten zu haben.
Jpaugh

Antworten:


163

Sie können Maven nicht dazu bringen, Abhängigkeiten erneut herunterzuladen. Stattdessen können Sie Abhängigkeiten löschen, die mit falsch heruntergeladen wurden mvn dependency:purge-local-repository

Siehe: http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html


11
Ist das nicht dasselbe?
Svish

2
Es ist kein Zugriff auf das Dateisystem erforderlich. Dies kann ein Problem sein, wenn Sie nur Build-Jobs konfigurieren (z. B. für ein CI-System).
Oliver Drotbohm

2
Wenn mehrere Projekte ausgeführt werden mvn dependency:purge-local-repository clean package, kann ein Projekt dieselbe Abhängigkeit im lokalen Repository löschen, während ein anderes Projekt die Kompilierung ausführt. Wie vermeide ich?
Vikyd

55

Ich habe gerade mein ~ / .m2 / Repository gelöscht und das erzwang einen erneuten Download;)


1
Es hilft als letztes Mittel, ich hatte ein Projekt, bei dem Eclipse und Maven etwas "verwirrt" waren. Durch einfaches Löschen des .m2-Ordners wurde das Projekt kompiliert und korrekt ausgeführt.
Leonardo

5
Es ist auch möglich, die Abhängigkeiten, von denen Sie wissen, dass sie aktualisiert werden müssen, selektiv aus dem Repository zu löschen. Eine manuelle Reinigung, wenn Sie so wollen.
Jpaugh

41

Ich denke, der folgende Befehl kann Ihnen helfen!


mvn -U clean install

4
Geben Sie die Abhängigkeit mit Maven in der Frage frei. Nein, das wäre vielleicht besser ein Kommentar gewesen.
Naman

30

Dank Ali Tokmen Antwort. Ich habe es geschafft, das Löschen der spezifischen lokalen Abhängigkeit mit dem folgenden Befehl zu erzwingen:

mvn dependency:purge-local-repository -DmanualInclude=com.skyfish:utils

utilsDadurch wird es aus meinem .m2 / Repository entfernt und die utilsJAR-Abhängigkeit wird beim Ausführen immer erneut heruntergeladen mvn clean install.


1
Ich brauchte einfach einen Weg, um Maven zu zwingen, eine Abhängigkeit erneut herunterzuladen. Dies ist die einzige Antwort, die dies tatsächlich tut, während andere Antworten vorschlagen, alles zu entfernen. Vielen Dank
smac89

14

Projekt Rechtsklick-> Maven -> Projekt aktualisieren und aktivieren Sie die Kontrollkästchen wie im Screenshot. Es wird auch Releases aktualisieren :)

Geben Sie hier die Bildbeschreibung ein


5
Es wäre schön zu wissen, wie sie diesen Teil "/ Releases" implementiert haben.
Ulises Layera

Danke dafür, genau das, was ich brauchte.
JamesG

12
mvn clean install -U

-U bedeutet Aktualisierung von Abhängigkeiten erzwingen.

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


Auch hier werden nur SNAPSHOT-Abhängigkeiten erneut heruntergeladen.
Zardoz89

6

Wenn Sie es zu X hinzugefügt haben, sollten Sie die Versionsnummer von X erhöht haben, dh X-1.2.
Dann sollte X-1.2 installiert / bereitgestellt worden sein und Sie sollten die Abhängigkeit Ihres Projekts von X geändert haben, um von der neuen Version X-1.2 abhängig zu sein


5

Wenn Sie die Gruppen-ID von kennen X, können Sie mit diesem Befehl alle Xund ihre Abhängigkeiten erneut herunterladen

mvn clean dependency:purge-local-repository -DresolutionFuzziness=org.id.of.x

Es macht dasselbe wie die anderen Antworten, die die Verwendung vorschlagen dependency:purge-local-repository, aber es löscht nur alles, was damit zusammenhängt, und lädt es erneut herunter X.


4

Wenn Sie wirklich alle Abhängigkeiten erzwingen möchten, können Sie versuchen, das gesamte Maven-Repository neu zu initialisieren. Wie in diesem bereits beschriebenen Artikel können Sie Folgendes verwenden:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

3

Löschen Sie einfach ~ / .m2 / repository ..... / actual_path, wo das ungültige LOC kommt, da es das erneute Herunterladen der gelöschten JAR-Dateien erzwingt. Löschen Sie nicht den gesamten Repository-Ordner, sondern den spezifischen Ordner, aus dem der Fehler stammt.


0

Durch Löschen des ~/.m2/repositorywird Ihr Problem gelöst. Aber wenn Sie noch das alte behalten müssen~/.m2/repository können Sie nur den maven lokalen Pfad vorübergehend ändern.

Wenn Sie an IntelliJ arbeiten, gehen Sie einfach zu Maven-Einstellungen und ändern Sie den Pfad des lokalen Repositorys an einen anderen Ort. Möglicherweise müssen Sie das Kontrollkästchen zum Überschreiben in der Nähe aktivieren.

Geben Sie hier die Bildbeschreibung ein


-1

Die meisten der oben angegebenen Antworten würden das Problem lösen.

Wenn Sie IntelliJ verwenden und möchten, dass es nur automatisch für Sie repariert wird, gehen Sie zu Maven-Einstellungen.

Erstellen, Ausführen, Bereitstellen -> Erstellen von Tools -> Maven

Geben Sie hier die Bildbeschreibung ein

Offline-Arbeit deaktivieren

Aktivieren Immer Snapshots aktualisieren (bei Bedarf wechseln)


1
Ich würde mich freuen, wenn Sie auch den Grund für die Ablehnung mitteilen können, während Sie dabei sind. Danke dir.
Abhishek Nandgaonkar

1
Vermutlich, da Snapshots keine Releases sind, wird das Problem dadurch nicht gelöst.
Soru

-2

Gehen Sie zum Erstellungspfad ... löschen Sie die vorhandene Maven-Bibliothek, die Sie hinzugefügt haben ... klicken Sie auf Bibliothek hinzufügen ... klicken Sie auf von Maven verwaltete Abhängigkeiten ... und klicken Sie dann auf Maven-Projekteinstellungen ... aktivieren Sie das Kontrollkästchen Maven-Abhängigkeiten auflösen ... es werden alle heruntergeladen Maven-Abhängigkeiten


2
Dies setzt die Verwendung einer IDE voraus, eine Annahme, die von der Frage nicht unterstützt wird, und Sie haben nicht einmal angegeben, welche IDE!
Phil
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.