Comment supprimer le fichier JAR du référentiel maven local qui a été ajouté avec install: install-file?

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

J'utilise la commande ci-dessus pour installer le jar local dans le repo local maven. Maintenant, j'ai la dépendance de maven repo. Je souhaite supprimer cela du dépôt local. Comment le nettoyer?

user1844840
la source

Réponses:

107

Bien qu'il existe une commande maven que vous pouvez exécuter pour ce faire, il est plus facile de simplement supprimer les fichiers manuellement du référentiel.

Comme ça sur Windows Documents and Settings\your username\.m2ou $HOME/.m2sous Linux

Lagz0ne
la source
10
Je supprimerais uniquement le fichier .m2/repository directory. Un collègue a déjà supprimé le répertoire .m2 et cela pose des problèmes car sur notre projet, nous devons modifier le settings.xmlfichier.
Tiris le
7
Notez qu'en supprimant le .m2/repositoryrépertoire, vous supprimerez également tous les fichiers du plugin maven. Alors purge-local-repositoryqu'en utilisant la commande, vous supprimez uniquement les dépendances.
collinhaines
3
La structure de répertoires sous .m2/repositoryest organisée par ID de groupe Maven, vous pouvez donc simplement supprimer le sous-répertoire correspondant à l'artefact que vous souhaitez supprimer.
Kevin Krumwiede
124

Bien que la suppression manuelle des fichiers fonctionne, il existe un moyen officiel de supprimer les dépendances de votre projet de votre référentiel local (cache) et de les resoudre éventuellement à partir de référentiels distants.

L'objectif purge-local-repository, sur le plugin de dépendance standard Maven, supprimera les dépendances installées localement de ce projet de votre cache. Vous pouvez éventuellement les resoudre à partir des référentiels distants en même temps.

Cela doit être utilisé dans le cadre d'une phase de projet car il s'applique aux dépendances du projet conteneur. Les dépendances transitives seront également purgées (localement) par défaut.

Si vous souhaitez supprimer explicitement un seul artefact du cache, utilisez-le purge-local-repositoryavec le manualIncludeparamètre. Par exemple, à partir de la ligne de commande:

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

La documentation implique que cela ne supprime pas les dépendances transitives par défaut. Si vous exécutez avec un emplacement de cache non standard, ou sur plusieurs plates-formes, ceux-ci sont plus fiables que la suppression des fichiers "à la main".

La documentation complète se trouve dans la spécification maven-dependency-plugin .

Remarque : les anciennes versions du dependencyplugin maven avaient un manual-purge-local-repositoryobjectif, qui est maintenant (version 2.8) implicite par l'utilisation de manualInclude. La documentation pour manualIncludes(avec un s) doit également être lue.

Steve Powell
la source
Je ne crois pas que cela fonctionne pour les .jars qui n'ont pas été téléchargés depuis maven central ou un autre référentiel. Lorsque j'exécute cette commande, il se débarrasse de tous les .jars qui ont automatiquement téléchargé, mais quand il arrive au .jars que j'ai installé manuellement, il [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 ...
génère
3
En fait, après l'avoir vérifié, j'ai réalisé qu'il désinstalle le .jar, mais qu'il génère toujours une erreur. Donc, pour les .jars qui ont été installés manuellement, je recommanderais de supprimer manuellement plutôt que d'utiliser cette méthode, car maven crée des fichiers étranges comme yourjar.jar.lastUpdatedet yourjar.pom.lastUpdatedque vous devrez peut-être supprimer manuellement de toute façon. Mais si maven gérait automatiquement toutes les dépendances, c'est un excellent moyen de désinstaller les dépendances.
stiemannkj1
Cette approche nécessite également un projet maven pour exécuter la commande. Cela ne semble pas fonctionner si vous avez exécuté la commande d'installation spécifiée par l'OP dans le contexte d'une construction Gradle, par exemple.
jdonmoyer
19

Au moins sur la version actuelle de maven, vous devez ajouter le commutateur -DreResolve = false si vous avez l'intention de supprimer les dépendances de votre dépôt local sans les télécharger à nouveau.

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

supprime les dépendances sans les télécharger à nouveau.

rob2universe
la source
pourriez-vous s'il vous plaît jeter un oeil: stackoverflow.com/questions/58937713/…
gstackoverflow
12

Supprimez tous les éléments (jar, pom.xml, etc.) de votre ~/.m2/repository/phonegap/1.1.0/répertoire local si vous utilisez un système d'exploitation Linux.

Abimaran Kugathasan
la source
Lorsque je retire le pot de cette façon, il "re-télécharge" le pot de l'ancien dossier. Il y a peut-être des références qui doivent également être supprimées.
Antonio Sesto
0

J'ai fait face au même problème, j'ai parcouru toutes les suggestions ci-dessus, mais rien n'a fonctionné. Enfin, j'ai supprimé les dossiers .m2 et .ivy et cela a fonctionné pour moi.

Nagesh Vashist
la source
-6
  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
la source
5
Cette réponse peut ou non résoudre le problème, mais que diriez-vous d'ajouter une explication à votre réponse, cela pourrait simplement aider le PO à comprendre ce que vous essayez de lui montrer.
Gerhard
2
Cette réponse n'est pas liée au problème: vous affichez la configuration du référentiel git dans le dossier .m2 et réinitialisez en tant que référentiel git.
lquitadamo