it-swarm.com.de

Wie entferne ich alte Abhängigkeiten aus Maven-Repositories?

Ich habe zu viele Dateien im .m2-Ordner, in denen Maven heruntergeladene Abhängigkeiten speichert. Gibt es eine Möglichkeit, alle alten Abhängigkeiten zu bereinigen? Wenn zum Beispiel bei 3 verschiedenen Versionen eine Abhängigkeit besteht: 1, 2 und 3, muss es nach der Reinigung nur eine dritte geben. Wie kann ich das für alle Abhängigkeiten im .m2-Ordner tun?

46
Cherry

Wenn Sie Unix verwenden, können Sie die Zugriffszeit der darin enthaltenen Dateien verwenden. Aktivieren Sie einfach die Zugriffszeit für Ihr Dateisystem, führen Sie anschließend einen sauberen Build aller Projekte aus, für die Sie Abhängigkeiten beibehalten möchten, und führen Sie dann Folgendes aus (UNTESTED!):

find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done

Dadurch werden alle * .pom-Dateien gefunden, auf die zuletzt vor mehr als 5 Minuten zugegriffen wurde (vorausgesetzt, Sie haben vor maximal fünf Minuten mit dem Build begonnen), und ihre Verzeichnisse werden gelöscht.

Fügen Sie "echo" vor dem rm hinzu, um einen "Trockenlauf" durchzuführen.

26
Florian

Kurze Antwort - Gelöschter .m2-Ordner in {user.home}. Z.B. In Windows 10 ist der Benutzer zu Hause C:\Users\user1. Erstellen Sie Ihr Projekt mit mvn clean package neu. Es bleiben nur die Abhängigkeiten, die von den Projekten benötigt werden.

Lange Antwort -. m2-Ordner ist wie ein normaler Ordner und der Inhalt des Ordners wird aus verschiedenen Projekten erstellt. Ich denke, es gibt keine Möglichkeit, automatisch herauszufinden, welche Bibliothek "alt" ist. In der Tat ist alt ein vages Wort. Es kann so viele Gründe geben, wenn eine frühere Version einer Bibliothek in einem Projekt verwendet wird. Daher ist es nicht möglich zu bestimmen, welche nicht verwendet wird.

Alles, was Sie tun können, ist, den .m2-Ordner zu löschen und alle Ihre Projekte neu zu erstellen. Anschließend wird der Ordner automatisch mit der erforderlichen Bibliothek erstellt.

Wenn Sie nur über eine bestimmte Version einer Bibliothek Bedenken haben, die in allen Projekten verwendet werden soll; Es ist wichtig, dass der Pom des Projekts auch auf die neueste Version aktualisiert wird. Wenn also unterschiedliche POMs auf unterschiedliche Versionen der Bibliothek verweisen, werden alle in .m2 heruntergeladen.

24

Bei einer POM-Datei für ein Maven-Projekt können Sie alle Abhängigkeiten im lokalen Repository (standardmäßig ~/.m2/respository) mit dem Apache Maven Dependency Plugin ..__ entfernen. Dazu gehört die Abhängigkeit: purge-local -repository-Funktionalität, die die Projektabhängigkeiten aus dem lokalen Repository entfernt und sie gegebenenfalls erneut auflöst.

Um die lokalen Abhängigkeiten zu bereinigen, müssen Sie nur den optionalen Parameter reResolve verwenden und auf false setzen, da er standardmäßig auf true gesetzt ist.

Dieser Befehlszeilenaufruf sollte funktionieren: Mvn-Abhängigkeit: purge-local-repository -DreResolve = false

5
Juanjo Marron
  1. Laden Sie alle tatsächlichen Abhängigkeiten Ihrer Projekte herunter

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  2. Verschieben Sie Ihr lokales Maven-Repository an einen temporären Speicherort

    mv ~/.m2 ~/saved-m2
    
  3. Benennen Sie alle Dateien maven-metadata-central.xml * aus dem gespeicherten Repository in maven-metadata.xml * um.

    find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
    
  4. Um die modifizierte Kopie des lokalen Repository als Spiegel einzurichten, erstellen Sie das Verzeichnis ~/.m2 und die Datei ~/.m2/settings.xml mit folgendem Inhalt (Ersetzen vonuserdurch Ihren Benutzernamen) :

    <settings>
     <mirrors>
      <mirror>
       <id>mycentral</id>
       <name>My Central</name>
       <url>file:/home/user/saved-m2/</url>
       <mirrorOf>central</mirrorOf>
      </mirror>
     </mirrors>
    </settings>
    
  5. Lösen Sie Ihre Projektabhängigkeiten erneut auf:

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  6. Jetzt haben Sie ein lokales Maven-Repository mit einem Minimum an notwendigen Artefakten. Entfernen Sie den lokalen Spiegel aus der Konfigurationsdatei und aus dem Dateisystem.

4
Sergey B.

Ich wollte auch alte Abhängigkeiten aus meinem Maven-Repository entfernen. Ich dachte daran, nur Florians Antwort auszuführen, aber ich wollte etwas, das ich ohne langes Linux-Snippet immer wieder laufen lassen könnte, und ich wollte etwas mit etwas Konfigurierbarkeit - mehr ein Programm, weniger eine Kette von Unix-Befehlen Also nahm ich die Grundidee und machte daraus ein (relativ kleines) Ruby-Programm, das alte Abhängigkeiten basierend auf ihrer letzten Zugriffszeit entfernt.

"Alte Versionen" werden nicht entfernt, aber da Sie möglicherweise zwei verschiedene aktive Projekte mit zwei verschiedenen Versionen einer Abhängigkeit haben, hätte das sowieso nicht getan, was ich wollte. Stattdessen entfernt es wie Florians Antwort Abhängigkeiten, auf die in letzter Zeit noch nicht zugegriffen wurde.

Wenn Sie es ausprobieren möchten, können Sie:

  1. Besuchen Sie das GitHub-Repository
  2. Klonen Sie das Repository oder laden Sie die Quelle herunter
  3. Überprüfen Sie optional den Code, um sicherzustellen, dass er nicht schädlich ist
  4. bin/mvnclean ausführen

Es gibt Optionen zum Überschreiben des Standard-Maven-Repositorys, zum Ignorieren von Dateien und zum Festlegen des Schwellenwertdatums. Sie können diese jedoch in README auf GitHub lesen.

Ich werde es wahrscheinlich irgendwann als Ruby-Edelstein verpacken, nachdem ich ein wenig mehr daran gearbeitet habe, was die Sache (gem install mvnclean; mvnclean) vereinfachen wird, wenn Ruby bereits installiert und betriebsbereit ist.

1

Bereinigen Sie einfach alle Inhalte unter .m2 -> Repository-Ordner. Wenn Sie ein Projekt erstellen, werden hier alle Abhängigkeiten geladen.

In Ihrem Fall hat Ihr Projekt früher eine alte Version einer Abhängigkeit verwendet und jetzt wird die Version aktualisiert. Besser sauberer .m2-Ordner und erstellen Sie Ihr Projekt mit mvn clean install.

In diesem Ordner werden nun Abhängigkeiten mit den neuesten Versionsmodulen heruntergeladen.

Sie müssen die Abhängigkeit, die Sie für das Projekt benötigen, kopieren. Wenn Sie diese in der Hand haben, löschen Sie alle <dependency>-Tags, die in <dependencies>-Tag Eingebettet sind, aus der POM.XML-Datei in Ihrem Projekt. 

Nach dem Speichern der Datei sehen Sie Maven-Abhängigkeiten nicht in Ihrer Libraries. Fügen Sie dann den zuvor kopierten <dependency> ein.

Die erforderlichen Jars werden automatisch von Maven heruntergeladen. Sie können dies auch in Der erzeugten Maven-Abhängigkeiten Libraries nach dem Speichern der Datei sehen.

Vielen Dank.

0

Ich habe ein Dienstprogramm erstellt und auf GitHub gehostet, um alte Versionen von Bibliotheken im lokalen Maven-Repository zu bereinigen. Das Dienstprogramm entfernt bei seiner Standardausführung alle älteren Artefaktversionen, wobei nur die neuesten Versionen übrig bleiben. Optional können alle Snapshots, Quellen, Javadocs sowie Gruppen oder Artefakte in diesem Prozess erzwungen/ausgeschlossen werden. Diese plattformübergreifende Unterstützung unterstützt auch das datumsbasierte Entfernen basierend auf dem letzten Zugriffs-/Downloaddatum.

https://github.com/techpavan/mvn-repo-cleaner

0
Pavan Kumar