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.

volni
quelle
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

Ali Tokmen
quelle
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;)

Ryan Angilly
quelle
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
Richard
quelle
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.

Skyfish
quelle
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

Nanosoft
quelle
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.

ArpitBora
quelle
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

Krone
quelle
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.

smac89
quelle
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
Bart den Haak
quelle
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.

Saurabh Oza
quelle
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

Tharindu Sathischandra
quelle
-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)

Abhishek Nandgaonkar
quelle
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

SagaramVijay
quelle
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