Maven传递依赖混淆

Maven传递依赖混淆,maven,maven-2,transitive-dependency,Maven,Maven 2,Transitive Dependency,如果我在应用程序(例如my.company.app)中包含库(例如mycompany.model.core快照),并且mycompany.model.core包含Hibernate作为依赖项,我是否可以引用my.company.app中的Hibernate类和函数,而不在应用程序中(显式)包含Hibernate 谢谢 你可以,但这被认为是不好的做法 如果您需要类或接口位于类路径上以编译应用程序,则应为其添加。这可以保护您不受上游依赖项更改的影响(例如,如果您所依赖的库切换到TopLink而不是H

如果我在应用程序(例如my.company.app)中包含库(例如mycompany.model.core快照),并且mycompany.model.core包含Hibernate作为依赖项,我是否可以引用my.company.app中的Hibernate类和函数,而不在应用程序中(显式)包含Hibernate


谢谢

你可以,但这被认为是不好的做法

如果您需要类或接口位于类路径上以编译应用程序,则应为其添加
。这可以保护您不受上游依赖项更改的影响(例如,如果您所依赖的库切换到TopLink而不是Hibernate),并允许Maven注意到直接依赖项和间接依赖项的版本号是否不同步


既然您同时控制库和应用程序构件,为什么不让它们都从一个公共父级继承
pom.xml
?然后,您可以从一个位置管理依赖项的版本(例如,Hibernate版本)。

为什么不将其视为“良好实践”?如果您使用指定版本的父pom,依赖关系仍然是集中的,我只是不想以后在我的dao中使用任何hibernate,但我想这是不切实际的。@SamLevin:在您的情况下,由于您控制这两个工件,我认为这不是问题。至于为什么这通常是最佳实践,我在回答中给出了一些理由。如果您需要更多,那么您可能希望发布后续问题以获得更多回复。