Forcer le téléchargement de la dépendance de version à l'aide de Maven

136

Je travaille sur un projet avec la dépendance X. X, à son tour, dépend de Y.

J'avais l'habitude d'inclure explicitement Y dans le pom de mon projet. Cependant, il n'a pas été utilisé et pour rendre les choses plus propres, je l'ai plutôt ajouté au pom de X en tant que dépendance. X est marqué comme une dépendance de version.

Le problème est qu'après avoir supprimé Y du pom de mon projet et l'avoir ajouté au pom de X, mon projet ne le reprend pas mvn -U clean package. Je connais les instantanés de mise à jour -U mais pas les versions.

Donc, sans supprimer le répertoire ~ / .m2 / repository, comment puis-je forcer un re-téléchargement du pom de X? De plus, j'ai essayé de courir dependency:purge-local-repositoryet cela n'a pas fonctionné non plus.

volni
la source
Vous avez marqué les questions comme "maven-2". L'option -U a été ajoutée dans Maven 3 pour résoudre ce problème. Je suggérerais une mise à niveau.
Mark O'Connor
Du point de vue de la méthodologie, si vous changez Xde pom, alors cela devrait constituer une nouvelle version, même s'il ne s'agit que d'un changement de numéro de patch: 1.3-> 1.3.1. Donc, cela éliminerait ce problème dès le départ.
jpaugh
Cependant, il est toujours possible d'avoir des problèmes similaires avec les instantanés, il est donc bon d'avoir des réponses.
jpaugh

Réponses:

166

Vous ne pouvez pas faire re-télécharger les dépendances de Maven, mais ce que vous pouvez faire à la place est de purger les dépendances qui ont été incorrectement téléchargées en utilisant mvn dependency:purge-local-repository

Voir: http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html

Ali Tokmen
la source
11
N'est-ce pas un peu la même chose?
Svish
2
Il ne nécessite pas d'accès au système de fichiers, ce qui peut être un problème si vous ne configurez que des travaux de construction (pour un système CI par exemple).
Oliver Drotbohm
2
Si plusieurs projets sont exécutés mvn dependency:purge-local-repository clean package, un projet peut être supprimé de la même dépendance dans le référentiel local pendant qu'un autre projet exécute la compilation. Comment éviter?
vikyd
55

Je viens de supprimer mon ~ / .m2 / repository et cela a forcé un re-téléchargement;)

Ryan Angilly
la source
1
Cela aide en dernier recours, j'avais un projet où éclipse et maven étaient un peu "confus". La simple suppression du dossier .m2 a permis au projet de se compiler et de s'exécuter correctement.
Leonardo
5
Il est également possible de supprimer sélectivement les dépendances dont vous savez qu'elles doivent être actualisées depuis l'intérieur du référentiel. Une purge manuelle, si vous voulez.
jpaugh
41

Je pense que la commande suivante peut vous aider!


mvn -U clean install
Richard
la source
4
relâchez la dépendance en utilisant Maven dans la question. Non, cela aurait pu être un meilleur commentaire.
Naman
31

Merci à la réponse d'Ali Tokmen. J'ai réussi à forcer la suppression de la dépendance locale spécifique avec la commande suivante:

mvn dependency:purge-local-repository -DmanualInclude=com.skyfish:utils

Avec cela, il supprime utilsde mon .m2 / référentiel et il re-télécharge toujours la utilsdépendance JAR lorsque je l'exécute mvn clean install.

skyfish
la source
1
J'avais simplement besoin d'un moyen de forcer maven à retélécharger une dépendance. C'est la seule réponse qui fait réellement cela, alors que d'autres réponses suggèrent de tout supprimer. Merci
smac89
14

Projet cliquez avec le bouton droit de la souris -> Maven -> Mettre à jour le projet et cochez les cases comme dans la capture d'écran. Il mettra également à jour les versions :)

entrez la description de l'image ici

nanosoft
la source
5
Ce serait bien de savoir comment ils ont implémenté cette partie "/ Releases".
Ulises Layera
Merci pour cela juste ce dont j'avais besoin.
JamesG
12
mvn clean install -U

-U signifie forcer la mise à jour des dépendances.

Si vous souhaitez mettre à jour une seule dépendance sans nettoyer ou -U, vous pouvez simplement la supprimer de votre dépôt local, puis la générer.

ArpitBora
la source
Encore une fois, cela ne télécharge que les dépendances SNAPSHOT.
Zardoz89
6

Lorsque vous l'avez ajouté à X, vous devriez avoir incrémenté le numéro de version de X, c'est-à-dire X-1.2.
Ensuite, X-1.2 devrait avoir été installé / déployé et vous devriez avoir changé la dépendance de vos projets sur X pour être dépendante de la nouvelle version X-1.2

Crowne
la source
6

Si vous connaissez l'identifiant du groupe de X, vous pouvez utiliser cette commande pour retélécharger tous Xet ses dépendances

mvn clean dependency:purge-local-repository -DresolutionFuzziness=org.id.of.x

Il fait la même chose que les autres réponses qui proposent d'utiliser dependency:purge-local-repository, mais il ne supprime et retélécharge que tout ce qui y est lié X.

smac89
la source
4

Si vous voulez vraiment forcer le téléchargement de toutes les dépendances, vous pouvez essayer de réinitialiser tout le référentiel maven. Comme dans cet article déjà décrit, vous pouvez utiliser:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install
Bart den Haak
la source
3

Supprimez simplement ~ / .m2 / repository ..... / actual_path où le LOC invalide arrive car il force à re-télécharger les fichiers jar supprimés. Ne supprimez pas tout le dossier du référentiel à la place, supprimez le dossier spécifique d'où provient l'erreur.

Saurabh Oza
la source
0

La suppression de ~/.m2/repositoryrésoudra votre problème. Mais, si vous avez encore besoin de conserver l'ancien, ~/.m2/repositoryvous pouvez simplement changer temporairement le chemin local de maven.

Si vous travaillez sur IntelliJ, accédez simplement aux paramètres Maven et modifiez le chemin du référentiel local vers un autre emplacement. Vous devrez peut-être cocher la case de remplacement à proximité.

entrez la description de l'image ici

Tharindu Sathischandra
la source
-1

La plupart des réponses fournies ci-dessus résoudraient le problème.

Mais si vous utilisez IntelliJ et que vous souhaitez qu'il le répare automatiquement, accédez aux paramètres Maven.

Construction, exécution, déploiement -> Outils de construction -> Maven

entrez la description de l'image ici

Désactiver le travail hors ligne

Activer Toujours mettre à jour les instantanés (changer si nécessaire)

Abhishek Nandgaonkar
la source
1
J'apprécierais que vous puissiez également partager la raison du vote négatif pendant que vous y êtes. Je vous remercie.
Abhishek Nandgaonkar
1
Vraisemblablement, étant donné que les instantanés ne sont pas des versions, cela ne résout pas le problème.
soru
-2

Allez au chemin de construction ... supprimez la bibliothèque maven existante que vous avez ajoutée ... cliquez sur ajouter une bibliothèque ... cliquez sur les dépendances gérées par maven ... puis cliquez sur les paramètres du projet maven ... cochez la case résoudre les dépendances de maven..il téléchargera tout dépendances maven

SagaramVijay
la source
2
Cela suppose l'utilisation de certains IDE, une hypothèse non prise en charge par la question, et vous n'avez même pas spécifié quel IDE!
Phil