web-dev-qa-db-fra.com

Maven. Dépendances transitoires

Mon projet P dépend de la dépendance A qui dépend de la dépendance B. Le fichier pom.xml de mon projet inclut A comme dépendance, et son pot est inclus dans le chemin de classe de P. Cependant, il y a un NoClassDefFoundError lancé au moment de l'exécution de P, qui provient de pots B manquants.

Maven n'aurait-il pas dû télécharger ces dépendances automatiquement?

35
Jake

Mon projet P dépend de la dépendance A [avec une portée de compilation] qui dépend de la dépendance B [avec une portée de compilation].

A moins que B soit une dépendance facultative de A, B doit être une dépendance de P avec une portée "compiler (*)" (voir le tableau de Dependency Scope et lire la note) et devrait donc être disponible au moment de l'exécution.

Cependant, il y a un NoClassDefFoundError lancé au moment de l'exécution de P, qui découle de pots B manquants.

Puisque vous exécutez le projet sous Eclipse, le chemin de classe est configuré pour vous, donc j'exclurai une erreur à ce niveau. Cela nous laisse avec le cas de la dépendance optionnelle.

PS: Un outil très utile pour étudier ce type de problème est dependency:tree.

25
Pascal Thivent

Si cette dépendance A a une portée de compilation - bien sûr, elle aurait dû être téléchargée et plus disponible sur le chemin de classe du projet. Mais s'il avait fourni la portée, ce serait le cas, puisque les deps fournis ne seraient pas fournis avec l'application par Maven.

Btw comment exécutez-vous ce projet - ne pas exécuter correctement peut également causer de tels problèmes et c'est une très bonne supposition. Par exemple - si vous utilisez maven plugin exec - maven configurera correctement le chemin de classe pour vous, mais sinon - vous devriez le configurer vous-même (ou construire un pot avec des dépendances avec le Assembly plugin ).

3
Bozhidar Batsov