较新版本的依赖项是否会覆盖maven项目中的旧版本?

use*_*356 9 java maven

如果我有一个maven项目,它具有对AB版本2.0的明确依赖性,并且AB版本1.0具有传递依赖性.B的较新版本是否会覆盖旧版本?我使用maven depencdy:解决目标,看起来旧的B版本没有解决.如果A与较新版本的B不兼容怎么办?或者,如果一个依赖于B版2.0和我的项目有显式依赖B版1.0上运行的依赖后:解决目标我没有看到的较新版本则.那么这些依赖关系如何得到解决呢?

当我使用resolve目标时,它会显示依赖关系.但是这个依赖关系将在哪个阶段使用?编译,测试,运行时?

JB *_*zet 13

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

这是一个完全愚蠢的规则吗?是的.它的唯一优势是您可以始终通过将其声明为项目的直接依赖项来强制执行特定版本的依赖项.

所以在你的情况下,将使用B:2.0,因为它被声明为直接依赖.如果A在B:2.0中不能正常工作,那么,在代码中使用B:1.0,或者选择与A完全相同但不会引起冲突的另一个库.