web-dev-qa-db-fra.com

Comment nettoyer les anciennes dépendances des dépôts Maven?

J'ai trop de fichiers dans le dossier .m2 où maven stocke les dépendances téléchargées. Est-il possible de nettoyer toutes les anciennes dépendances? Par exemple, s'il existe une dépendance avec 3 versions différentes: 1, 2 et 3, après le nettoyage, il ne doit y avoir que la 3ème. Comment puis-je le faire pour toutes les dépendances dans le dossier .m2?

46
Cherry

Si vous êtes sous Unix, vous pouvez utiliser le temps d’accès des fichiers qu’il contient. Activez simplement le temps d'accès de votre système de fichiers, puis lancez une nouvelle version de tous vos projets pour lesquels vous souhaitez conserver les dépendances, puis procédez comme suit (INONDÉ!):

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

Tous les fichiers * .pom ayant été utilisés pour la dernière fois il y a plus de 5 minutes (en supposant que vous ayez commencé vos versions il y a 5 minutes maximum) seront supprimés et leurs répertoires supprimés.

Ajoutez "echo" avant la machine pour effectuer un "essai à sec".

26
Florian

Réponse courte - Suppression du dossier .m2 dans {user.home}. Par exemple. dans Windows 10, la maison de l'utilisateur est C:\Users\user1. Reconstruisez votre projet en utilisant mvn clean package. Il ne resterait que les dépendances requises par les projets.

Réponse longue -. Le dossier m2 est comme un dossier normal et son contenu est construit à partir de différents projets. Je pense qu’il n’ya aucun moyen de déterminer automatiquement quelle bibliothèque est "ancienne". En fait vieux est un mot vague. Il peut y avoir tant de raisons pour lesquelles une version précédente d'une bibliothèque est utilisée dans un projet. Il est donc impossible de déterminer celle qui est inutilisée.

Tout ce que vous pouvez faire est de supprimer le dossier .m2 et de reconstruire tous vos projets pour que le dossier se construise automatiquement avec toute la bibliothèque requise.

Si vous êtes préoccupé par une seule version d'une bibliothèque à utiliser dans tous les projets; il est important que le pom du projet soit également mis à jour vers la dernière version. Autrement dit, si différents POM font référence à différentes versions de la bibliothèque, ils seront tous téléchargés au format .m2.

24
Gyanendra Dwivedi

Avec un fichier POM pour un projet maven, vous pouvez supprimer toutes ses dépendances dans le référentiel local (par défaut ~/.m2/respository) à l’aide du Apache Maven Dependency Plugin . Fonctionnalité -repository qui supprime les dépendances du projet du référentiel local et éventuellement les resoudre.

Pour nettoyer les dépendances locales, il vous suffit d'utiliser le paramètre facultatif reResolve et de le définir sur false car il est défini sur true par défaut.

Cet appel de ligne de commande devrait fonctionner comme suit: Dépendance mvn: purge-local-repository -DreResolve = false

5
Juanjo Marron
  1. Téléchargez toutes les dépendances réelles de vos projets

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  2. Déplacez votre référentiel Maven local vers un emplacement temporaire

    mv ~/.m2 ~/saved-m2
    
  3. Renommez tous les fichiers maven-metadata-central.xml * du référentiel enregistré en maven-metadata.xml *.

    find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
    
  4. Pour configurer la copie modifiée du référentiel local en tant que miroir, créez le répertoire ~/.m2 et le fichier ~/.m2/settings.xml avec le contenu suivant (en remplaçantuserpar votre nom d'utilisateur) :

    <settings>
     <mirrors>
      <mirror>
       <id>mycentral</id>
       <name>My Central</name>
       <url>file:/home/user/saved-m2/</url>
       <mirrorOf>central</mirrorOf>
      </mirror>
     </mirrors>
    </settings>
    
  5. Résolvez à nouveau les dépendances de vos projets:

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  6. Vous avez maintenant un référentiel Maven local avec un minimum d'artefacts nécessaires. Supprimez le miroir local du fichier de configuration et du système de fichiers.

4
Sergey B.

Je voulais aussi supprimer les anciennes dépendances de mon référentiel Maven. Je pensais juste lancer la réponse de Florian, mais je voulais quelque chose que je pouvais courir encore et encore sans me souvenir d'un long extrait de Linux, et je voulais quelque chose avec un peu de configurabilité - plus d'un programme, moins d'une chaîne de commandes unix J'ai donc pris l'idée de base et en ai fait un programme (relativement petit) Ruby, qui supprime les anciennes dépendances en fonction de leur dernier temps d'accès.

Cela ne supprime pas les "anciennes versions", mais comme vous pouvez avoir deux projets actifs différents avec deux versions différentes d'une dépendance, cela n'aurait pas répondu à mes attentes de toute façon. Au lieu de cela, comme la réponse de Florian, il supprime les dépendances auxquelles on n'a pas accédé récemment.

Si vous voulez l'essayer, vous pouvez:

  1. Visitez le répertoire GitHub
  2. Cloner le référentiel ou télécharger la source
  3. Inspectez éventuellement le code pour vous assurer qu'il n'est pas malveillant
  4. Exécuter bin/mvnclean

Il existe des options pour remplacer le référentiel Maven par défaut, ignorer les fichiers, définir la date de seuil, mais vous pouvez les lire dans le README sur GitHub.

Je le préparerai probablement comme un joyau Ruby à un moment ou à un autre après y avoir travaillé un peu plus, ce qui simplifiera les choses (gem install mvnclean; mvnclean) si vous avez déjà installé et opérationnel Ruby.

1
Geoffrey Wiseman

Il suffit de nettoyer chaque contenu sous .m2 -> dossier du référentiel. Lorsque vous générez un projet, toutes les dépendances se chargent ici.

Dans votre cas, votre projet utilisait peut-être une ancienne version de toute dépendance et la version est maintenant mise à niveau. Donc, mieux nettoyer le dossier .m2 et construire votre projet avec mvn clean install.

Maintenant, les dépendances avec les modules de la dernière version seront téléchargées dans ce dossier.

1

Vous devez copier la dépendance dont vous avez besoin pour le projet . Si vous les avez en main, supprimez toutes les balises <dependency> incorporées dans la balise <dependencies> Du fichier POM.XML de votre projet. 

Après avoir enregistré le fichier, vous ne verrez pas Dépendances Maven dans votre Libraries. Ensuite, collez le <dependency> que vous avez précédemment copié.

Les jars requis seront automatiquement téléchargés par Maven, vous pouvez également le voir dans Le Dépendances Maven générées Libraries après avoir enregistré le fichier.

Merci.

0
Shubhasish Bhunia

Je suis arrivé avec un utilitaire hébergé sur GitHub pour nettoyer les anciennes versions des bibliothèques du référentiel Maven local. L'utilitaire, dans son exécution par défaut, supprime toutes les anciennes versions des artefacts, ne laissant que les dernières. En option, il peut supprimer tous les instantanés, les sources, les javadocs, mais aussi les groupes ou les artefacts peuvent être forcés/exclus dans ce processus. Cette plate-forme croisée prend également en charge la suppression basée sur la date en fonction des dates de dernier accès/téléchargement.

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

0
Pavan Kumar