Java Maven-从x管理的版本,因重复而省略?
我很难理解maven依赖关系树在声明从x管理的版本时会发生什么;因重复而省略 例如,假设我在Java Maven-从x管理的版本,因重复而省略?,java,maven,dependency-management,Java,Maven,Dependency Management,我很难理解maven依赖关系树在声明从x管理的版本时会发生什么;因重复而省略 例如,假设我在server-a的依赖项管理部分定义了enterprise-data-2.4 在server-a的依赖关系树中,我得到了以下内容,用于其中一个依赖关系server-b拉入enterprise-data-2.4 [INFO] +- hello.world.welcome.to:server-b:jar:3.1-SNAPSHOT:runtime [INFO] | +- (hello.world.where.
server-a
的依赖项管理部分定义了enterprise-data-2.4
在server-a
的依赖关系树中,我得到了以下内容,用于其中一个依赖关系server-b
拉入enterprise-data-2.4
[INFO] +- hello.world.welcome.to:server-b:jar:3.1-SNAPSHOT:runtime
[INFO] | +- (hello.world.where.am: enterprise-data:jar:2.4:runtime - version managed from 3.0; omitted for duplicate)
假设server-b
是唯一拉入enterprise-data-2.4
的jar,我的理解是server-a
将始终拉入enterprise-data-2.4
。这是正确的吗
但是,我在server-b
中的代码依赖于enterprise-data-3.0
,server-b
的编译时依赖于enterprise-data-3.0
现在,我有一个测试项目,比如说test-b
,它测试server-b
jar,它存在于server-a
项目中,并且测试依赖于enterprise-data-3.0
。这些测试直接命中server-a
上的代码
当我在test-b
中运行测试时,我是否应该在尝试访问enterprise-data-3.0
中存在的功能时出错,因为它没有被server-a
拉入,或者它是否会通过,因为对enterprise-data-3.0
有测试依赖关系?它目前通过了测试,但我不确定测试依赖性是否足够
请帮我理解
编辑:我正在使用maven-3
谢谢
例如,假设我在server-a的依赖项管理部分定义了enterprise-data-2.4
然后你总是会得到2.4,即使只有罐子依赖于1.8。依赖关系管理覆盖依赖关系中介
假设server-b是惟一一个拉入enterprise-data-2.4的jar,我的理解是server-a在这里总是拉入enterprise-data-2.4。这是正确的吗
假设您没有依赖关系管理,那么是的。如果有多个依赖于不同版本的依赖项,那么根据Maven version>2.0.9的依赖项中介规则,首先加载哪一个(及其可传递依赖项)是一个问题。其他将是:“从x开始管理,重复时省略”
当我在测试b中运行测试时,我在尝试访问enterprise-data-3.0中存在的功能时是否会出错,因为它没有被服务器a拉入,还是会通过测试,因为它依赖于enterprise-data-3.0?它目前通过了测试,但我不确定测试依赖性是否足够
如果它使用不兼容的代码拉错了版本,是的,您将看到错误。对于Maven 3,使用3.0定义测试范围依赖项,使用2.4定义编译范围依赖项,这意味着Maven将覆盖2.4,并使用在测试范围上定义的较新的依赖项。有关更多详细信息,请参阅
尽管如此,您始终可以在test-b中使用依赖项管理来修复要使用的每个依赖项的版本。Maven可传递依赖项的依赖项中介通过将第一个声明用作主声明来工作。因为跟踪可传递的依赖关系很麻烦,所以您确实应该研究依赖关系管理。基本上可以在这里看到我的答案以了解详细信息:@t0mppa-我正在使用依赖关系管理来拉入enterprise-data-2.4。请再读一遍我的问题。好的,重读并尝试回答你的问题。如果我仍然误解你,请用一些具体的例子来编辑你的问题。谢谢你的回答。