web-dev-qa-db-fra.com

Maven ne parvient pas à trouver un artefact local

Parfois, maven se plaint qu'une dépendance particulière, construite et empaquetée localement, ne puisse pas être trouvée dans le référentiel local lors de la construction d'un autre projet la contenant comme dépendance. Nous obtenons une erreur comme:

Échec d'exécution de l'objectif sur le projet X: impossible de résoudre les dépendances du projet X: échec de la recherche de Y dans [référentiel archiva] mis en cache dans le référentiel local. La résolution ne sera pas tentée tant que l'intervalle de mise à jour de internal ne sera pas écoulé ou que les mises à jour ne seront forcées - >

Où X est le projet en cours de construction et Y est l’artefact supposé manquant. Si vous regardez dans le référentiel local, l'artefact est là. Cet artefact n'étant jamais installé dans notre référentiel archiva, le problème est purement basé sur le référentiel local.

Nous avons essayé divers profils dans settings.xml, et bien sûr "mvn -U". Ni ne font de bien, ni ne devraient le faire car cet artefact ne va jamais plus loin que le référentiel local.

Les deux seules choses qui semblent fonctionner sont d'attendre très longtemps jusqu'à ce que maven se redresse, ou de supprimer complètement le référentiel local. Vraisemblablement, l'option d'attente est liée à l'intervalle de mise à jour susmentionné.

Nous avons rencontré ce problème avec maven 3.0.2 et 3.0.3. Nous utilisons Archiva 1.0.3 (mais encore une fois, cela ne devrait pas être un facteur). Toute aide serait grandement appréciée.

69
user1686620

Le référentiel Maven local suit l'origine des artefacts en utilisant un fichier nommé "_maven.repositories" dans le répertoire d'artefacts. Après l'avoir retiré, la construction a fonctionné. Cette réponse corrigé le problème pour moi.

53
jhanson

Comme les options ici ne fonctionnaient pas pour moi, je partage comment j'ai résolu le problème:

Mon projet a un projet parent (avec son propre pom.xml) qui contient de nombreux modules enfants, dont l’un (A) est dépendant d’un autre enfant (B). Lorsque j'ai essayé mvn package dans A, cela ne fonctionnait pas car B ne pouvait pas être résolu.

L'exécution de mvn install dans le répertoire parent a effectué le travail. Après cela, je pourrais faire mvn package à l'intérieur de A et alors seulement, il pourrait trouver B.

20
florianpfisterer

Même en mode hors ligne, maven vérifiera les référentiels distants s’il existe un marqueur _remote.repositories pour la dépendance. Si vous devez utiliser le mode hors connexion, vous devrez peut-être supprimer ces fichiers.

La commande simple Shell ci-dessous supprime ces fichiers de marqueurs. Ceci est sûr si vous utilisez uniquement le mode hors connexion pour la machine. Je ne ferais pas cela sur une machine qui doit extraire des fichiers du Web.

J'ai utilisé cette stratégie sur un serveur de génération déconnecté du Web. Nous devons y transférer le référentiel, supprimer les fichiers de marqueurs, puis le lancer en mode hors connexion.

Sous Linux/Unix, vous pouvez supprimer les fichiers de marqueurs du référentiel distant de la manière suivante:

cd ~/.m2
find . -name "_remote.repositories" -type f -delete
9
Jon

Maven se souvient de ne pas avoir trouvé quelque chose. La clé est "la résolution ne sera pas tentée avant que l'intervalle de mise à jour interne ne soit écoulé ou que les mises à jour ne soient forcées ->"

La solution rapide consiste à supprimer votre sous-répertoire "référentiel" local pour l'artefact posant problème, en supposant que vous ayez résolu le problème. :)

mvn -U forcera la mise à jour à partir du référentiel distant - encore une fois, en supposant que vous ayez déjà rempli à distance ledit artefact.

7
Andre

Lorsque cela m'est arrivé, c'est parce que j'avais copié à l'aveugle mon fichier settings.xml à partir d'un modèle et qu'il contenait toujours l'élément <localRepository/> vierge. Cela signifie qu'aucun référentiel local n'est utilisé lors de la résolution des dépendances (bien que vos artefacts installés soient toujours placés à l'emplacement par défaut). Quand j’ai remplacé cela par <localRepository>${user.home}\.m2\repository</localRepository>, cela a commencé à fonctionner.

Pour * nix, ce serait <localRepository>${user.home}/.m2/repository</localRepository>, je suppose.

6
Paul Hicks

Une des erreurs que j'ai trouvées autour de Maven est quand je mets mon fichier settings.xml dans le mauvais répertoire. Il doit être dans le dossier .m2 sous votre répertoire personnel. Assurez-vous qu'il se trouve au bon endroit (avec settings-security.xml si vous l'utilisez).

0
Ashik Uzzaman

Je rencontre un problème similaire lorsque mon nouveau projet dépend de Oracle jdbc jar (que j’ai installé dans mon référentiel local et qui fonctionne bien pour d’autres projets). J'ai essayé l'option -U, en supprimant le fichier .lastupdate ou le répertoire entier et de le télécharger à nouveau, mais cela n'a pas fonctionné. enfin, j'ai supprimé le répertoire et l'ai réinstallé localement, cela fonctionne.

0
yuxh

J'avais DependencyResolutionException dans Ubuntu Linux lorsque j'ai installé des artefacts locaux via un script Shell. La solution consistait à supprimer les artefacts locaux et à les réinstaller "manuellement" en appelant mvn install:install-file via un terminal.

0
naXa

Même moi, j'ai fait face à ce problème et l'ai résolu de 2 manières:

1) Dans votre IDE, sélectionnez le projet et nettoyez tous les projets, puis installez toutes les dépendances maven en cliquant avec le bouton droit de la souris sur projet -> aller à maven et Mettre à jour les dépendances de projets sélectionne tous les projets en même temps pour les installer. Une fois que cela est fait exécuter le projet particulier

2) Sinon, vous pouvez vérifier dans le fichier pom.xml les dépendances pour lesquelles vous obtenez une erreur et "mvn clean install" ceux dépendantsprojet first et les dépendances d’installation maven du projet en cours dans lequel vous rencontrez des problèmes. Par ceci les dépendances du projet local seront construites et les bocaux seront créés.

0
Neha Tawar

Tout attraper. Lorsque les solutions mentionnées ici ne fonctionnent pas (cela se produit dans mon cas), supprimez simplement tout le contenu du dossier/répertoire '.m2' et faites mvn clean install.

0
lupchiazoem