2012-06-26 4 views
2

Si j'inclue une bibliothèque (par exemple, mycompany.model.core-SNAPSHOT) dans une application (par exemple my.company.app), et mycompany.model.core contient Hibernate comme dépendance, puis-je référencer Hibernate classes et fonctions dans my.company.app SANS inclure hibernate (explicitement) dans l'application?Confusion de dépendance transitive Maven

Merci!

Répondre

3

Vous pouvez, mais ce n'est pas considéré comme une bonne pratique.

Si vous avez besoin d'une classe ou d'une interface pour être sur le chemin de classe afin de compiler votre application, vous devez ajouter un <dependency> pour cela. Cela vous protège des modifications apportées à vos dépendances en amont (par exemple, si la bibliothèque dépend de TopLink au lieu de Hibernate) et permet à Maven de remarquer si les numéros de version de vos dépendances directes et indirectes ne sont pas synchronisés.

Puisque vous contrôlez à la fois la bibliothèque et les artefacts d'application, pourquoi ne pas les faire tous les deux hériter d'un parent commun pom.xml? Ensuite, vous pouvez gérer les versions de vos dépendances (par exemple, votre version Hibernate) à partir d'un seul endroit. Pourquoi cela n'est-il pas considéré comme une «bonne pratique»?

+0

Pourquoi? La dépendance est toujours centralisée si vous utilisez un pom parent qui spécifie la version, je ne voulais tout simplement pas hiberner dans mon dao plus tard, mais je suppose que c'est impraticable. –

+0

@SamLevin: dans votre cas, puisque vous contrôlez les deux artefacts, je ne pense pas que ce soit un problème. Quant à savoir pourquoi c'est généralement la meilleure pratique, j'ai donné quelques raisons dans ma réponse. Si vous avez besoin de plus, vous pouvez poster une question de suivi pour obtenir plus de réponses. –

Questions connexes