Wie entferne ich die JAR-Datei aus dem lokalen Maven-Repository, das mit install: install-file hinzugefügt wurde?

122
mvn install:install-file -Dfile=phonegap-1.1.0.jar -DgroupId?=phonegap -DartifactId?=phonegap -Dversion=1.1.0 -Dpackaging=jar

Ich benutze den obigen Befehl, um lokales JAR in Maven Local Repo zu installieren. Jetzt habe ich die Abhängigkeit von Maven Repo. Ich möchte dies aus dem lokalen Repo entfernen. Wie reinige ich es?

user1844840
quelle

Antworten:

106

Es gibt zwar einen Maven-Befehl, den Sie ausführen können, aber es ist einfacher, die Dateien einfach manuell aus dem Repository zu löschen.

So unter Windows Documents and Settings\your username\.m2oder $HOME/.m2Linux

Lagz0ne
quelle
10
Ich würde nur die löschen .m2/repository directory. Ein Mitarbeiter hat das Verzeichnis .m2 zuvor gelöscht und es verursacht Probleme, da wir in unserem Projekt die settings.xmlDatei ändern müssen .
Tiris
7
Beachten Sie, dass Sie beim Löschen des .m2/repositoryVerzeichnisses auch alle Maven-Plugin-Dateien löschen. Während Sie mit dem purge-local-repositoryBefehl nur Abhängigkeiten löschen.
Collinhaines
3
Die Verzeichnisstruktur unter .m2/repositoryist nach der Maven-Gruppen-ID organisiert, sodass Sie einfach das Unterverzeichnis löschen können, das dem Artefakt entspricht, das Sie entfernen möchten.
Kevin Krumwiede
124

Obwohl das manuelle Löschen von Dateien funktioniert, gibt es eine offizielle Möglichkeit, Abhängigkeiten Ihres Projekts aus Ihrem lokalen (Cache-) Repository zu entfernen und optional aus Remote-Repositorys aufzulösen.

Das Ziel purge-local-repositoryim Standard-Maven-Abhängigkeits-Plugin entfernt die lokal installierten Abhängigkeiten dieses Projekts aus Ihrem Cache. Optional können Sie sie gleichzeitig aus den Remote-Repositorys neu auflösen.

Dies sollte als Teil einer Projektphase verwendet werden, da es für die Abhängigkeiten des enthaltenen Projekts gilt. Auch transitive Abhängigkeiten werden standardmäßig (lokal) gelöscht.

Wenn Sie ein einzelnes Artefakt explizit aus dem Cache entfernen möchten, verwenden Sie es purge-local-repositorymit dem manualIncludeParameter. Zum Beispiel über die Befehlszeile:

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId, ..."

Die Dokumentation impliziert, dass dadurch standardmäßig keine transitiven Abhängigkeiten entfernt werden. Wenn Sie mit einem nicht standardmäßigen Cache-Speicherort oder auf mehreren Plattformen ausgeführt werden, sind diese zuverlässiger als das Löschen von Dateien "von Hand".

Die vollständige Dokumentation finden Sie in der Maven-Dependency-Plugin- Spezifikation.

Hinweis : Ältere Versionen des Maven- dependencyPlugins hatten ein manual-purge-local-repositoryZiel, das jetzt (Version 2.8) durch die Verwendung von impliziert wird manualInclude. Die Dokumentation für manualIncludes(mit einem s) sollte ebenfalls gelesen werden.

Steve Powell
quelle
Ich glaube nicht, dass dies für .jars funktioniert , die nicht von maven central oder einem anderen Repository heruntergeladen wurden. Wenn ich diesen Befehl ausführe, werden alle .jarautomatisch heruntergeladenen s entfernt, aber wenn es zu den .jars kommt, die ich manuell installiert habe, wird folgende Fehlermeldung [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:purge-local-repository (default-cli) on project alloy-generator: Failed to refresh project dependencies for: myartifact: required artifacts missing: [ERROR] manually-downloaded-and-installed.jar ...
ausgegeben
3
Nachdem ich es überprüft hatte, stellte ich fest, dass es das deinstalliert .jar, aber es gibt immer noch einen Fehler aus. Also für .jars , die manuell installiert wurden, würde ich empfehlen , manuell zu löschen , anstatt mit dieser Methode, da Maven einige seltsamen Dateien wie erstellt yourjar.jar.lastUpdatedund yourjar.pom.lastUpdateddie Sie möglicherweise ohnehin manuell löschen müssen. Wenn maven jedoch alle Abhängigkeiten automatisch verwaltet, ist dies eine hervorragende Möglichkeit, die Abhängigkeiten zu deinstallieren.
stiemannkj1
Dieser Ansatz erfordert auch ein Maven-Projekt, um den Befehl auszuführen. Dies scheint nicht zu funktionieren, wenn Sie den Installationsbefehl ausgeführt haben, den das OP im Kontext eines Gradle-Builds angegeben hat.
jdonmoyer
18

Zumindest in der aktuellen Maven-Version müssen Sie den Schalter -DreResolve = false hinzufügen, wenn Sie die Abhängigkeiten aus Ihrem lokalen Repo entfernen möchten, ohne sie erneut herunterzuladen.

mvn dependency:purge-local-repository -DreResolve=false

Entfernt die Abhängigkeiten, ohne sie erneut herunterzuladen.

rob2universe
quelle
Könnten
gstackoverflow
12

Löschen Sie alle Elemente (jar, pom.xml usw.) in Ihrem lokalen ~/.m2/repository/phonegap/1.1.0/Verzeichnis, wenn Sie ein Linux-Betriebssystem verwenden.

Abimaran Kugathasan
quelle
Wenn ich das Glas auf diese Weise entferne, "lädt" es das Glas erneut aus dem alten Ordner herunter. Möglicherweise müssen auch Referenzen entfernt werden.
Antonio Sesto
0

Ich hatte das gleiche Problem, ging alle oben genannten Vorschläge durch, aber nichts funktionierte. Schließlich habe ich sowohl den Ordner .m2 als auch den Ordner .ivy gelöscht und es hat bei mir funktioniert.

Nagesh Vashist
quelle
-5
  1. cd ~/.m2
  2. git init
  3. git commit -am "some comments"
  4. cd /path/to/your/project
  5. mvn install
  6. cd ~/.m2
  7. git reset --hard
Kent Yao
quelle
4
Diese Antwort könnte das Problem lösen oder nicht, aber wie wäre es, wenn Sie Ihrer Antwort eine Erklärung hinzufügen. Dies könnte dem OP nur helfen, zu verstehen, was Sie ihm zeigen wollen.
Gerhard
2
Diese Antwort hat nichts mit dem Problem zu tun: Sie zeigen das Setup des Git-Repositorys im Ordner .m2 an und setzen es als Git-Repository zurück.
lquitadamo