web-dev-qa-db-fra.com

Erreur lors de l'ouverture de la hiérarchie des dépendances de fichiers Maven POM dans Eclipse - "Erreur de lecture du projet"

Lorsque j'ouvre un fichier POM et que je clique sur l'onglet "Hiérarchie des dépendances" en bas, cela me donne l'erreur "Erreur de lecture du projet". Cela fonctionne avec d'autres projets dans le même espace de travail, mais pas avec celui-ci. Des idées?

enter image description here

EDIT

En réponse à la réponse de @ Yhn.

  1. L'exécution des phases de compilation et de package en dehors d'Eclipse à partir de la ligne de commande fonctionne comme prévu. Il compile l'application et construit le fichier WAR final.
  2. Eclipse pointe en effet sur l'emplacement par défaut du fichier settings.xml de Maven. Il doit donc connaître les référentiels personnalisés qui y sont définis (ma société possède son propre référentiel Maven).
  3. Je peux ouvrir et modifier le fichier POM à partir d'Eclipse. Il doit donc disposer d'autorisations de lecture/écriture sur le fichier.
  4. Le projet n'est pas configuré dans Eclipse en tant que projet Maven. Par conséquent, je ne peux pas exécuter la phase de package à partir d'Eclipse (je ne peux l'exécuter qu'à partir de la ligne de commande).

Je me demande si cela a quelque chose à voir avec le fait que j’avais du mal à construire le projet avec Maven 3 car apparemment certaines des dépendances transitives sont configurées pour Maven 1, ce que Maven 3 ne supporte pas (c’est ma théorie de toute façon, sur la base de certains des messages d’erreur). Je peux construire le projet avec Maven 2, mais je reçois quand même des messages tels que:

Downloading: http://dist.codehaus.org/mule/dependencies/maven2/org/codehaus/xfie/bcprov-jdk14/133/bcprov-jdk14-133.pom
[INFO] Unable to find resource 'org.codehaus.xfire:bcprov-jdk14:pom:133' in repsitory mule (http://dist.codehaus.org/mule/dependencies/maven2)

Cependant, il doit pouvoir trouver ces dépendances, car il a très bien téléchargé les fichiers JAR et peut construire l’application. Il semble que le problème réside dans le fait que les dépendances ne sont associées à aucun fichier POM, ce qui explique peut-être pourquoi elles ne peuvent pas être utilisées avec Maven 3. Cela pourrait également expliquer pourquoi je ne peux pas afficher la hiérarchie des dépendances dans Eclipse.

EDIT 2

J'ai converti le projet en projet Maven en allant dans "Configurer> Convertir en projet Maven". Lorsque j'ouvre le fichier POM, je vois l'erreur:

ArtifactDescriptorException: Failed to read artifact descriptor for woodstox:wst (Click for 140 more)

(Woodstox: wst est une autre dépendance transitive du projet). Une erreur apparaît dans la vue "Marqueurs" pour apparemment toutes les dépendances et dépendances transitives de mon projet. Cependant, je peux réussir à construire le projet en effectuant une "Exécution en tant que> Maven". ( Edit: Cela peut être dû au fait que ce projet n'a pas de code source Java, mais que les fichiers JAR des dépendances apparaissent correctement dans le fichier WAR final.) La hiérarchie des dépendances génère toujours la même erreur - "Erreur de lecture du projet" .

À propos des messages "Impossible de trouver la ressource" - mais cela n'apparaît que pour une poignée de dépendances transitives. Le projet a beaucoup plus de dépendances transitives, mais ces messages n'apparaissent pas pour eux. Comme les dépendances n’ont pas de fichiers POM, Maven essaie de les rechercher chaque fois que le projet est créé. Est-ce normal de ne pas avoir de POM ??

Comment puis-je m'y prendre pour obtenir un responsable des pensions? Est-ce quelque chose qui devrait être installé sur le référentiel Maven de l'entreprise ou pouvez-vous l'installer sur votre propre poste de travail?

19
Michael

J'ai eu ce problème avec des pots non-maven que je devais inclure dans mon projet maven. Je mets les pots dans mon référentiel local à l'aide de cette commande maven: 

mvn install:install-file -Dfile=/test/gov.nist.xccdf-1.2.jar -DgroupId=gov.nist -DartifactId=xccdf -Dpackaging=jar -Dversion=1.2

Ensuite, je me suis référé à eux comme des dépendances dans mon pom.xml:

    <dependency>
        <groupId>gov.nist</groupId>
        <artifactId>xccdf</artifactId>
        <version>1.2</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

Cela a fonctionné pendant un certain temps, mais j'ai dû mettre à niveau quelque chose dans Eclipse et j'ai commencé à avoir l'erreur que vous décrivez.

Le correctif consiste à les extraire du référentiel local et à refaire le fichier d'installation en demandant à maven de générer un pom pour vous:

mvn -DgeneratePom=true install:install-file -Dfile=/test/gov.nist.xccdf-1.2.jar -DgroupId=gov.nist -DartifactId=xccdf -Dpackaging=jar -Dversion=1.2

La commande entraînera la génération d'un pom dans le même répertoire (dans votre référentiel local) où le fichier jar est placé.

Dans les versions récentes du support Eclipse maven, la construction de maven est toujours effectuée avec maven 2 (si vous cliquez avec le bouton droit sur votre pom.xml, choisissez Exécuter en tant que package mvn par exemple). L'analyse des dépendances est maintenant effectuée avec un plugin intégré maven 3, qui n'aime pas les dépendances sans pom.xml.

8
Glenn

J'ai eu le même problème. Si vous avez fait de votre projet un projet maven, vous devez exécuter:

  • Clic droit sur le projet | Maven | Mettre à jour les dépendances ou 
  • Clic droit sur le projet | Maven | Mettre à jour la configuration du projet

Cela a fonctionné pour moi.

5
OblongZebra

Compte tenu de l'information à travers les commentaires:

le package mvn compile/mvn fonctionne via la console (je suppose en dehors d’Eclipse). Sur cette base, le fichier POM doit être correct et les dépendances peuvent être résolues.

Toutefois; il se peut que les paramètres d'Eclipse ne soient pas corrects. Par exemple, si Eclipse possède des propriétés propres maven (au lieu du fichier par défaut ~/.m2/settings.xml); Je peux l’imaginer échouer dans la résolution des dépendances configurées dans le fichier settings.xml utilisé par maven lui-même. Les paramètres correspondants doivent être définis dans Préférences Eclipse @ Maven> Paramètres utilisateur.

Assurez-vous également qu'Eclipse peut réellement lire le fichier (non verrouillé, droits corrects, etc.).

Cela devrait-il sembler correct? pouvez-vous essayer d'exécuter la compilation d'objectifs mvn depuis eclipse? Vous pouvez le faire en cliquant avec le bouton droit de la souris sur le projet et en sélectionnant run as > maven package. De cette façon, il devrait exécuter maven avec les mêmes paramètres que ceux utilisés par Eclipse et pourrait afficher des erreurs supplémentaires dans sa configuration.

- En réponse à des informations complémentaires:

En gros, il vous dit - lors de l'utilisation de Maven 2 - qu'il ne peut pas trouver une ressource de dépendance (dans ce cas, bcprov-jdk14) dans le référentiel donné (codehaus/mule). Lorsque je recherche ce module Maven (bcprov-jdk14), je le trouve dans le référentiel central Maven (via notre lien local) @ repo1.maven.org/maven2 . Peut-être que cela cause l'erreur que vous obtenez avec Maven2?

Et comme le dit le doc Maven 3; pour Maven 1.x repo's; vous devriez les utiliser par le biais d'un gestionnaire de référentiel qui peut vous le servir en tant que référentiel Maven 2 (je pense que nous le faisons ici aussi pour certains référentiels via Sonatype Nexus OSS)

ps .: Activer la gestion de la dépendance maven dans Eclipse devrait être suffisant pour pouvoir utiliser des cibles exécutées par maven; si vous voulez le tester.

-

Cela peut sembler être de multiples problèmes ... étant donné que la construction normale de Maven fonctionne bien, on pourrait penser que Maven peut au moins obtenir les artefacts dont il dépend et leurs dépendances ... Pourtant, Eclipse ne semble pas en mesure de .

Vérifiez si vos paramètres de connexion Internet Eclipse sont corrects. Étant donné que vous parliez d'un rapport d'entreprise, je suppose qu'il y aura probablement aussi un proxy (je devais configurer mon Eclipse pour l'utiliser également; bien que ce soit pour les plugins (voir point suivant)).

Une autre possibilité, d’expérience, peut être un blocage de proxy basé sur des règles sur les demandes d’URL * .pom (notre proxy ici bloque cela pour forcer l’utilisation du gestionnaire de dépôt local, quel effet diabolique et ennuyeux :() et ouvrez le fichier .pom qu'il essaie de télécharger manuellement dans votre navigateur pour voir si tel est le cas (je ne peux pas, par exemple ...).

Pour que le référentiel soit configuré, vous devrez probablement demander au responsable du référentiel de l'ajouter en tant que proxy maven2.

À tout le moins, il semble qu'Eclipse ait des problèmes pour obtenir les liens de dépendance (nécessaires pour créer l'arbre de dépendance) à partir d'Internet. Vous pouvez toujours essayer de demander à quelques ICT équipes (si elles en sont suffisamment capables ...) dans votre entreprise, elles ont peut-être des indications utiles.

2
Yhn
<properties>
    <!-- ********************** -->

    <!-- Plugin's properties -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <Java.version>1.7</Java.version>
</properties>

ce réglage de pom a fonctionné pour moi

1
traysine zheng

J'ai eu le même problème lorsque j'ai ajouté une nouvelle dépendance à pom.xml sans connexion réseau. Après cela, j'ai eu tant de problèmes tels que "Artefacts manquants", "Descripteur manquant" ou "Erreur de lecture du projet". J'ai résolu ça

  1. supprimez la mauvaise dépendance que vous venez d'ajouter à partir du référentiel local.
  2. reconstruire l'index local.
  3. rajouter la dépendance
1
jason zhang

Cela se produit généralement s'il y a une faute de frappe dans le pompon que Maven ne peut pas comprendre, puis jette Project read error. Comme dans mon cas, j'ai copié un extrait de dépendance maven et j'ai passé la version. Au lieu de taper la version actuelle #, elle l’a récupérée de manière dynamique ${asciidoctorj.version} et mon pom ne l’avait pas dans la section des propriétés. Alors j'ai eu cette erreur. Une fois que j'ai enlevé cela et mis un numéro de version, il a commencé à fonctionner. 

0
Mike

J'ai fait face à la même situation aujourd'hui. Dans mon cas, cela est causé par le nom de la dépendance dans le cas contraire. Par exemple. 

Projet A -> Projet B -> Projet CDans le fichier pm du projet B, j'ai spécifié par erreur le nom de l'artefact de dépendance avec "c" au lieu de "C". 

Comme dans Mac OS, le système de fichiers est insensible à la casse. je peux donc le construire en ligne de commande sans détecter cette erreur. 

Dans Eclipse, cela se rompt, mais cela donne un très mauvais message d'erreur. Dans la liste des erreurs, il est écrit "problème de dépendance", mais le nom de la dépendance est vide. Il ne peut pas non plus identifier quelle ligne du POM est à l'origine du problème.

Lorsque vous essayez d'ouvrir "Effective POM" dans le visualiseur POM, le projet affichera une erreur. Dans la boîte de dialogue d'erreur qui apparaît, vous verrez:

Could not read maven project
Java.nio.channels.OverlappingFileLockException 

Tous les messages sont inutiles et trompeurs. 

J'ai finalement détecté ce problème en le soumettant à Jenkins CI après des heures perdues.

0
Jianwu Chen

Je l'avais après avoir copié un dossier du référentiel local à partir d'une autre machine. Le correctif était d'aller dans le dossier du référentiel que j'avais copié et supprimer _ remote.repositories avec les fichiers 'LastUpdated' puis actualiser les dépendances Maven dans Eclipse (Alt + F5)

0
reid