Comment nettoyer de vieilles dépendances à partir de dépôts maven?

j'ai trop de fichiers .dossier m2 où maven stocke les dépendances téléchargées. Est-il un moyen de nettoyer toutes les anciennes dépendances? Par exemple, s'il y a une dépendance avec 3 versions différentes: 1, 2 et 3, Après nettoyage il ne doit y avoir que 3. Comment je peux le faire pour toutes les dépendances .le dossier m2?

41
demandé sur anuj pradhan 0000-00-00 00:00:00

6 réponses

courte réponse - Supprimer. m2 dossier {user.home}. Par exemple: dans windows 10 la maison de l'utilisateur est C:\Users\user1. Re-construire votre projet à l'aide de mvn clean package. Il ne resterait que les dépendances exigées par les projets.

Longue Réponse - .m2 dossier comme un dossier normal et le contenu du dossier est construit à partir de différents projets. Je pense qu'il n'est pas possible de déterminer que la bibliothèque est "vieux". En fait vieux est un mot vague. Y pourraient être autant de raisons lors d'une précédente version d'une bibliothèque est utilisée dans un projet, d'où la détermination de ce qui est inutilisé n'est pas possible.

Tout ce que vous pouvez faire, c'est supprimer le .m2 dossier et re-construire tous vos projets et puis le dossier serait automatiquement construit avec toute la bibliothèque nécessaire.

si vous vous souciez seulement d'une version particulière d'une bibliothèque à utiliser dans tous les projets, il est important que la pom du projet soit mise à jour au plus tard version. c'est-à-dire que si différents noms renvoient différentes versions de la bibliothèque, tous seront téléchargés .m2.

22
répondu gyan 2017-11-30 17:53:15

Si vous êtes sous Unix, vous pouvez utiliser le temps d'accès des fichiers. Activez juste le temps d'accès pour votre système de fichiers, puis exécutez une construction propre de tous vos projets pour lesquels vous voulez garder des dépendances et ensuite faites quelque chose comme ça (non testé!):

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

Cela permettra de trouver tous *.fichiers pom qui ont été consultés pour la dernière fois il y a plus de 5 minutes (en supposant que vous avez commencé vos compilations max il y a 5 minutes) et supprimer leurs répertoires.

ajouter "echo" avant le rm à faire un "dry-run".

21
répondu Florian 2015-04-30 14:28:57

avec un fichier POM pour un projet maven, vous pouvez supprimer toutes ses dépendances dans le dépôt local (par défaut~/.m2 / respository) en utilisant le Apache Maven Dependency Plugin. Il inclut la fonctionnalité dependency: purge-local-repository qui supprime les dépendances de projet du dépôt local et les résout en option.

Pour nettoyer les dépendances vous avez juste à utiliser le paramètre optionnel reResolve et le mettre à false depuis qu'il est défini à true par défaut.

Cet appel en ligne de commande devrait fonctionner: dépendance mvn: purge-local-repository-DreResolve=false

4
répondu Juanjo Marron 2014-11-12 20:28:02
  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éplacer votre dépôt maven local à un emplacement temporaire

    mv ~/.m2 ~/saved-m2
    
  3. Renommer tous les fichiers maven-métadonnées-central.xml* à partir enregistré référentiel maven-métadonnées.xml*

    find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
    
  4. pour configurer la copie modifiée du dépôt local comme miroir, créez le répertoire~/.m2 et le fichier ~/.m2/paramètres.xml avec le contenu suivant (en remplaçant utilisateur par 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ésoudre vos projets dépendances de nouveau:

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  6. vous avez maintenant un dépôt maven local avec un minimum d'artefacts nécessaires. Supprimer le miroir local du fichier de configuration et du système de fichiers.

4
répondu user2639353 2017-03-28 20:55:28

je voulais aussi supprimer les anciennes dépendances de mon dépôt Maven. J'ai pensé à lancer la réponse de Florian, mais je voulais quelque chose que je pouvais passer en revue sans me souvenir d'un long morceau de linux, et je voulais quelque chose avec un peu de configurabilité -- plus d'un programme, moins d'une chaîne de commandes unix, donc j'ai pris l'idée de base et l'ai transformée en un (relativement petit) programme Ruby, qui supprime les anciennes dépendances basées sur leur dernier temps d'accès.