109 votes

'La version de 'dependencies.dependency.version' est manquante, mais la version est gérée dans le parent'

J'ai un projet maven qui contient plusieurs modules. Dans Eclipse (Juno, avec m2e) il semble compiler correctement. Mais lorsque je fais un install maven sur l'un des modules, la construction échoue immédiatement.

Pom parent :

  com.sw.system4
  system4-parent
  ${system4.version}
  pom
  Projet Parent System 4

    system4-data
     ...autres...

    0.0.1-SNAPSHOT
    3.2.3.RELEASE
    ... autres...

        org.springframework
        spring-core
        ${spring.version}
        runtime

    ... beaucoup d'autres ...

Pom enfant :

    com.sw.system4
    system4-parent
    0.0.1-SNAPSHOT

  system4-data

        org.springframework
        spring-core
        runtime

    ... beaucoup d'autres...

Lorsque je compile, j'obtiens la sortie suivante :

[ERREUR] La construction n'a pas pu lire 1 projet -> [Aide 1]
[ERREUR]
[ERREUR]   Le projet com.sw.system4:system4-data:0.0.1-SNAPSHOT (C:\work\eclips
e_workspaces\systemiv\system4-parent\system4-data\pom.xml) a 8 erreurs

[ERREUR]     'dependencies.dependency.version' pour org.springframework:spring-cor
e:jar est manquant. @ ligne 16, colonne 16

... autres omis pour plus de clarté ...

Je ne comprends pas pourquoi il ne tente même pas de compiler. J'ai essayé de supprimer la portée runtime du parent et de l'enfant, et cela ne change rien. S'il vous plaît aidez!

82voto

Sherms Points 442

Si quelqu'un arrive ici avec le même problème que celui que j'avais, mon problème était que je manquais les balises autour des dépendances que j'avais copiées du pom enfant.

11 votes

Et je me suis toujours demandé à quoi servait la balise dependencyManagement jusqu'à présent.. Cela a fonctionné pour moi.. J'avais oublié cette balise dans le POM parent.

3 votes

Cela semble être la réponse qui s'appliquera à la plupart des personnes venant ici

0 votes

64voto

Brian Blain Points 101

Voici quelques choses que je pense que vous pourriez essayer :

  1. Met la valeur littérale de la version dans le pom enfant

      org.springframework
      spring-core
      3.2.3.RELEASE
      runtime
  2. Videz votre cache .m2 normalement situé à C: \ Users \ user.m2 \ repository. Je dirais que je le fais assez fréquemment lorsque je travaille avec maven. Surtout avant de valider afin que je puisse avoir plus confiance en l'exécution CI. Vous n'avez pas à détruire le dossier à chaque fois, parfois juste vos packages de projet et le dossier .cache suffisent.

  3. Ajoutez une balise relativePath à votre déclaration du pom parent

      com.mycompany.app
      my-app
      1
     ../parent/pom.xml

Il semble que vous ayez 8 erreurs au total dans vos poms. Je recommande d'essayer de faire fonctionner une compilation de base avant d'ajouter le pom parent et les propriétés.

1 votes

Juste pour clarifier - les 7 autres erreurs que j'ai exclues étaient toutes du même type - c'est-à-dire que dependencies.dependency.version est manquant pour (autre dépendance)

7 votes

Était la clé pour moi: un module n'était pas à l'emplacement par défaut des enfants mais un sous-répertoire plus profond. Merci.

5 votes

Une autre raison pour laquelle Maven se plaint de la dépendance manquante est lorsque la dépendance déclarée dans le POM parent a un qui ne correspond pas au type recherché par le POM enfant.

7voto

fancyplants Points 559

Voilà, après beaucoup de cheveux arrachés, j'ai un système de compilation en place.

Nettoyer le cache .m2 était une des choses qui a aidé (merci à Brian)

Une des erreurs que j'avais commises était d'avoir mis 2 versions de chaque dépendance dans la section de gestion des dépendances du pom parent - une avec runtime et une sans - cela était pour essayer de satisfaire eclipse (c'est-à-dire ne pas afficher d'erreurs de compilation inattendues) tout en pouvant exécuter en ligne de commande. Cela ne faisait que compliquer les choses, donc j'ai enlevé les versions de runtime.

Définir explicitement la version du parent semblait également fonctionner (c'est dommage que maven n'ait pas un support plus large pour utiliser des propriétés comme ça!)

    com.sw.system4
    system4-parent
    0.0.1-SNAPSHOT

Je recevais ensuite des erreurs étranges de type 'failed to collect dependencies for' dans le module enfant pour toutes les dépendances, disant qu'il ne pouvait pas localiser le parent - même si c'était configuré de la même manière que les autres modules qui se compilaient.

J'ai finalement résolu les choses en compilant depuis le pom parent au lieu d'essayer de compiler chaque module individuellement. Cela m'a signalé une erreur avec une correction relativement simple dans un autre module, ce qui a étrangement permis que tout se compile.

En d'autres termes, si vous obtenez des erreurs maven liées au module enfant A, cela peut en fait être un problème avec le module enfant Z sans rapport, donc regardez là-bas. (et supprimez votre cache)

0 votes

Nettoyer tout le dépôt local est une solution un peu trop radicale ... Il suffit de supprimer le sous-arbre concerné par votre projet. Un autre post sur le même sujet : stackoverflow.com/questions/2389602/…

4voto

Yanflea Points 1817

En théorie, Maven n'autorise pas l'utilisation d'une propriété pour définir une version parente.

Dans votre cas, Maven ne parvient pas simplement à déterminer que la version 0.0.1-SNAPSHOT de votre POM parent est celle actuellement présente dans votre projet, et donc il essaie de la trouver dans votre dépôt local. Il en trouve probablement une car c'est une version snapshot, mais il s'agit d'une ancienne version qui ne contient probablement pas votre section de gestion des dépendances.

Il existe cependant une solution de contournement :

Modifiez simplement la section parent dans le POM enfant avec ceci :

    com.sw.system4
    system4-parent
    ${system4.version}
    ../pom.xml

0 votes

Le problème est que le projet parent a d'autres sous-projets (modules) qui se compilent correctement. Le relativePath par défaut pointe correctement vers l'emplacement du pom parent.

3voto

inor Points 489

Assurez-vous que la valeur dans le nœud project/parent/version de l'enfant correspond à la valeur project/version de son parent

0 votes

Cela. Vous avez probablement tiré des modifications à distance qui ont mis à jour les versions partout sauf dans votre nouveau module.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X