web-dev-qa-db-fra.com

Le POM pour <nom> n'est pas valide, les dépendances transitives (le cas échéant) ne seront pas disponibles

Cette question est obsolète et n'est plus pertinente. Depuis, j'ai déménagé à Gradle pour la construction de mon projet et je ne peux plus vérifier que les réponses fonctionnent ou non.

J'ai rencontré quelques problèmes avec Maven. Laissez-moi d'abord décrire la configuration de mon projet:

Framework
|  -- Apache Commons Math 3.0
|  -- Bouncy Castle 1.5
|  -- etc.. (lots more)
|________
|        Client
|        | -- GUI libraries
|        | -- etc.
|
|________
         Server
         | -- Server Libraries
         | -- etc.

Donc, essentiellement, j'ai un framework qui contient la plupart des dépendances, puis deux projets, "Server" et "Client" qui contiennent leur propre MAIS, ainsi que le framework comme dépendance (module de Framework). J'ai installé le projet Framework dans mon référentiel local et mes deux projets peuvent voir le code Framework-Native (c'est-à-dire ma propre logique). Cependant, ils ne semblent pas être en mesure d'utiliser les dépendances du projet-cadre. En essayant de construire l'un des projets "enfants", je reçois ceci:

Invalid POM for de.r2soft.empires.framework:Framework:jar:Alpha-1.2, 
transitive dependencies (if any) will not be available, 
enable debug logging for more details 

J'ai essayé de trouver la raison derrière cela (ou mieux encore une solution) mais je n'ai rien trouvé qui résolve mes problèmes. J'espère que quelqu'un ici peut aider. Ma version maven semble être 3.2.1 (c'est ce que -version me dit quand même)

Voici mon framework-pom.xml et le client-pom.xml sur Pastebin:

Cadre: http://Pastebin.com/cceZECaT

Client: http://Pastebin.com/1Cuxve5F

L'aide est appréciée.

29
AreusAstarte

Une des raisons est que vous utilisez un projet pour lequel le nom de pom parent est obsolète. Cela se produit souvent si vous mettez à jour le pom parent sans l’installer/le déployer.

Pour voir si c'est le cas, lancez simplement avec mvn dependency:tree -X et recherchez l'erreur exacte. Il mentionnera qu'il manque des éléments que vous savez se trouver dans le pom parent, et non dans l'artefact dont vous dépendez (par exemple, une version de jar).

Le correctif est assez simple: installez le pom parent à l’aide de mvn install -N et réessayez.

16
Omri Spector

J'ai eu une erreur similaire, Dans mon cas, supprimer tous les artefacts liés du référentiel local était la solution de contournement ...

15
LCoelho

Supprimez le dossier du référentiel dans .m2 et lancez mvn clean install.

Tenez-nous au courant du résultat et bonne chance

4
Anas Lachheb

En supposant que les poms des projets client et serveur ne soient pas valides en raison d’une expansion non satisfaite, les conditions suivantes devraient alors fonctionner ... Si les projets "client" et "serveur" dépendent du "Framework" défini dans une balise, vous pouvez d’abord "Framework" utilisant l'option -N. Tout d’abord, accédez au répertoire Framework, puis à: mvn -N clean install L’option -N indique à maven d’installer uniquement le pom racine dans le référentiel local et d’ignorer les modules enfants. Cd maintenant dans votre projet enfant et réexécutez votre commande install dans votre module client ou serveur. La version du client ou du serveur doit maintenant trouver le pom parent avec les propriétés dont il a besoin dans le référentiel local.

Vous pouvez obtenir le même effet en faisant une référence de chemin de fichier explicite en utilisant la balise relativePath dans la balise parent de votre pom enfant:

<parent>
  <relativePath>../my-parent</relativePath>
</parent>
4
D Drummond

J'ai le même type de problème et j'ai peut-être la réponse… .. J'ai un projet de niveau supérieur MyProject, Module1 et Module2.Module2 dépend de Module1 et l'entrée est répertoriée comme dépendance (par défaut) .Mon projet

<modules>
Module1
Module2
</modules>

mvn dependency:tree du dossier de MyProject est OK: module2 dépend de module1

MyProject
---
com.acme:Module1:version
---
com.acme:Module2:version
+com.acme:Module1:version

Le problème est que si je lance mvn dependency:tree dans le dossier Module2 ..__, le message d'erreur suivant s'affiche:

The POM for com.acme:Module2:version is invalid, 
transitive dependencies (if any) will not be available

Après quelques investigations, j'ai découvert que le fichier pom créé/copié par la partie installation de la construction en tant que m2/com/acme/myproject/Module1/version/Module1-version.pom était le fichier pom d'origine . Celui-ci utilise des variables pour les versions en tant que (dupliqué dans de nombreux autres modules non listés ici) ou un chemin système (pas de choix d’avoir une dépendance système). Ces variables sont définies dans le fichier POM parent . Si je remplace tous les ${} dans le fichier module pom par leurs valeurs, tout va bien . En gros, lors de la création du tout, les valeurs de les variables sont disponibles pour tous les modules dépendants car il s'agit du même processus. Lorsque vous créez un module individuel, les variables définies dans le POM parent ne sont pas disponibles.

Votre propre fichier pom de structure contient une variable pour le chemin systempath de net.sf.javaml. Codez-la en dur ou trouvez une autre solution, telle qu'une nomenclature . https://maven.Apache.org/guides/introduction/introduction -to-dependency-mécanisme.html

3
Olivier D

Le Framework artefact disponible dans votre référentiel local avant d'exécuter une install sur le projet client car il n'y a pas de couplage entre les deux projets (l'artefact client} n'est pas une module de votre Framework projet).

Donc, pour résoudre ce problème, vous devez exécuter mvn install sur votre projet Framework afin que le fichier jar packagé soit copié dans votre référentiel local. Il appartient ensuite à maven de le découvrir et de le trouver lorsque vous exécutez une phase maven sur le projet client.

Pour que vos artefacts soient partagés au sein de votre organisation, vous devez déployer vos artefacts (téléchargement) sur un miroir d'hébergement Nexus.

2
tmarwen

Dans mon cas, maven a corrompu un des pom de dépendance transitive (double contenu), alors je l’ai simplement retiré de mon dossier m2 La clé -X m'a aidé à trouver le certain pom cassé.

J'ai eu le même problème. Je gère tous les modules référencés par le projet que j'essayais de construire. Et le problème s'est avéré que je devais faire "mvn deploy" sur tous les projets parents du module qui montrait cette erreur lors de l'utilisation dans un autre module pom.xml. Voici l'intégralité de l'explication http://programtalk.com/Java/i-used-to-get-this-maven- ER-all- Time/

0
awsome

Vous devez envoyer la sortie au fichier journal avec cette commande:

mvn clean install --log-file C:\XXXX\Maven\log.txt

ouvrez log.txt et analysez quelles dépendances ne sont pas trouvées ou pom.xml ne sont pas dans un état valide

supprimez les pom qui ne sont pas valides et relancez mvn clean install

c'est tout.