In letzter Zeit scheint Apache Maven Probleme mit dem Caching zu haben. Durch Neuinstallationen unserer Projekte unter Windows Vista oder Windows 7 werden manchmal Artefakte mit denselben Daten wie bei einem vorherigen Build erstellt, obwohl die Dateien des neueren Artefakts hätten aktualisiert werden müssen.
Gibt es eine Möglichkeit, diesen Cache zu leeren, um Maven zu zwingen, immer einen sauberen Build des lokalen Artefakts auszulösen, das erstellt werden soll?
Insbesondere haben wir Probleme beim Erstellen einer Webanwendung mit dem Kriegs-Plugin. Maven-Version ist 3.0.3. Die Version des War Plugins ist 2.1.1.
-U
Flagge ausprobiert, mit der Artefakte aktualisiert werden?mvn clean install
die neuen Artefakte in das lokale Repository stellen?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Antworten:
Löschen Sie die Artefakte (oder das vollständige lokale Repo)
c:\Users\<username>\.m2\repository
von Hand.quelle
The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
mvn dependency:purge-local-repository
endlich funktioniertVerwenden Sie zum Bereinigen des lokalen Caches das Abhängigkeits-Plug-In.
mvn dependency:purge-local-repository
: Dies ist ein Versuch, die lokalen Repository-Dateien zu löschen, aber er füllt immer das lokale Repository, nachdem Dinge entfernt wurden.mvn dependency:purge-local-repository -DreResolve=false
: Dies vermeidet das erneute Auflösen der Abhängigkeiten, scheint aber zeitweise immer noch ins Netzwerk zu gehen.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Dies wurde von Paweł Prażak hinzugefügt und scheint gut zu funktionieren. Ich würde das dritte verwenden, wenn das lokale Repo geleert werden soll, und das erste, wenn Sie nur das lokale Repo wegwerfen und die Abhängigkeiten erneut abrufen möchten.quelle
<User_Name>/.m2
Ort. Ich bin mir nicht sicher, ob es der Grund wäre.Haben Sie überprüft / verändert die updatePolicy Einstellungen für Ihre Repositories in Ihrem
settings.xml
.Versuchen Sie es einzustellen
always
.quelle
<updatePolicy>
in meiner pom.xml, aber es gibt<snapshotPolicy>
Ich würde folgendes tun:
Die Flags weisen maven an, nicht zu versuchen, Abhängigkeiten aufzulösen oder das Netzwerk zu erreichen. Löschen Sie, was Sie lokal sehen.
Und ignorieren Sie Fehler (
--fail-at-end
) bis zum Ende. Dies ist manchmal nützlich für Projekte, bei denen die Abhängigkeiten etwas durcheinander sind oder die sich auf ein etwas durcheinandergebrachtes internes Repository stützen (es passiert).quelle
Dies funktioniert in der Spring Tool Suite v 3.1.0.RELEASE, aber ich vermute, dass es auch in Eclipse verfügbar ist.
Nach dem Löschen der Artefakte von Hand (wie oben von palacsint angegeben) in der
/username/.m2
Verzeichnis , indizieren Sie die Dateien wie folgt neu:Gehe zu:
Windows->Preferences->Maven->User Settings
Speisekarte.Klicken Sie auf die
Reindex
Schaltfläche neben demLocal Repository
Textfeld. Klicken Sie auf "Übernehmen" und dann auf "OK" und Sie sind fertig.quelle
Wie einige Antworten gezeigt haben, möchten Sie manchmal das lokale Repository wirklich vollständig löschen. Beispielsweise gibt es möglicherweise einige Artefakte, die nicht gelöscht werden können, da sie vom POM nicht mehr referenziert werden.
Wenn Sie diese Löschung in eine Maven-Phase einbetten möchten,
clean
können Sie beispielsweisemaven-clean-plugin
das Repository verwenden und über die folgenden Einstellungen auf das Repository zugreifen:quelle
Verwenden
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
Sie diese Option, wenn Sie Maven-Plugins als eines der Module haben. Andernfalls versucht Maven, sie neu zu kompilieren und lädt die Abhängigkeiten erneut herunter.quelle
Ich hatte das gleiche Problem und habe dafür einen Einzeiler in Shell geschrieben.
Ich habe es als Einzeiler gemacht, weil ich ein Jenkins-Projekt haben wollte, um es einfach auszuführen, wann immer ich es brauchte, damit ich mich nicht bei Sachen usw. anmelden musste. Wenn Sie sich ein Shell-Skript dafür erlauben, Sie können es sauberer schreiben:
Sollte funktionieren, aber ich habe nicht das ganze Skript getestet. (Ich habe den ersten Befehl getestet, aber nicht das gesamte Skript.) Dieser Ansatz hat den Nachteil, dass zuerst ein großer komplizierter Befehl ausgeführt wird. Es ist idempotent, also können Sie es selbst testen. Das Löschen ist danach ein eigener Befehl. Auf diese Weise können Sie alles ausprobieren und überprüfen, ob es das tut, was Sie denken, da Sie Löschbefehlen nicht ohne Überprüfung vertrauen sollten. Es ist jedoch aus einem guten Grund klug: Es ist tragbar. Es respektiert Ihre settings.xml-Datei. Wenn Sie diesen Befehl ausführen und maven anweisen, eine bestimmte XML-Datei (das Argument -s oder --settings) zu verwenden, funktioniert dies weiterhin. Sie müssen also nicht herumspielen, um sicherzustellen, dass überall alles gleich ist.
Es ist ein bisschen umständlich, aber es ist eine anständige Art, Geschäfte zu machen, IMO.
quelle
Es gibt also einige Befehle, die Sie zum Reinigen verwenden können
Auch das Löschen des Repository-Ordners aus .m2 kann helfen.
quelle