2013-11-03 164 views
6

如果我有上有明确的相关性的B版2.0B版1.0一个具有传递性依赖Maven项目。 B的较新版本是否覆盖旧版本? 我使用maven depencdy:解决目标,它看起来像老版本B未解决。如果A与更新版本B不兼容?或者,如果一个取决于B版2.0和我的项目有运行依赖后B版1.0显式依赖:解决目标,我看不到的较新版本即可。那么这些依赖关系如何得到解决呢?更新版本的依赖项覆盖了Maven项目中的旧版本吗?

而当我使用解析目标时,它显示依赖关系。但是这个依赖关系将用于什么阶段?编译,测试,运行时?

回答

9

更接近您的依赖树的根的版本将是首选。如果两个相互冲突的版本在树中具有相同的深度,则第一个版本(从树的顶部开始)获胜。

这是一个完全愚蠢的规则?是的。它唯一的优点是,您可以始终强制某个特定版本的依赖项,方法是将其声明为项目的直接依赖项。

所以在你的情况下,将使用B:2.0,因为它被声明为直接依赖。如果A对B:2.0无法正常工作,那么在代码中使用B:1.0,或者选择另一个与A执行相同操作但不会导致冲突的库。