Maven - version managed from x, omitted for duplicate?(Maven-从x管理的版本,是否因重复而被省略?)
问题描述
我很难理解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.am: enterprise-data:jar:2.4:runtime - version managed from 3.0; omitted for duplicate)
假设server-b
是唯一拉入的JARenterprise-data-2.4
,我的理解是server-a
总是在这里拉入enterprise-data-2.4
。这样做正确吗?
但是,server-b
中代码依赖于enterprise-data-3.0
,server-b
的编译时依赖于enterprise-data-3.0
。
现在,我有一个测试项目,比如说test-b
,它测试server-a
项目中存在的server-b
JAR,并且对enterprise-data-3.0
具有测试依赖关系。这些测试直接命中server-a
上的代码。
当我在test-b
中运行我的测试时,我在尝试访问enterprise-data-3.0
中存在的功能时应该收到错误,因为它不是由server-a
引入的,还是会因为对enterprise-data-3.0
存在测试依赖关系而通过?它当前已通过,但我不确定测试依赖项是否足够。
请帮我理解一下。
编辑:我正在使用maven-3
。
谢谢。
推荐答案
例如,假设我在服务器a的依赖项管理部分中定义了Enterprise-data-2.4。
然后你总是得到2.4,即使只有取决于1.8的罐子也是如此。依赖项管理优先于依赖项中介。
假设服务器-b是唯一拉入企业数据-2.4的JAR,我的理解是服务器-a将始终在这里拉入企业数据-2.4。这样做正确吗?
假设您没有依赖项管理,则是。如果存在依赖于不同版本的多个依赖项,则问题是首先加载哪个依赖项(及其传递依赖项),根据Maven Version>2.0.9的依赖项中介规则。其他选项为:"从x管理,重复则省略"。
如果它使用不兼容的代码拉入错误的版本,是的,您将看到错误。对于Maven3,使用3.0定义测试范围依赖项,使用2.4定义编译范围依赖项,这意味着Maven将覆盖2.4,并使用在测试范围中定义的较新的依赖项。有关详细信息,请参阅this question and its answers。当我在test-b中运行测试时,尝试访问Enterprise-Data-3.0中的功能时是否会出现错误,因为它不是由服务器-a引入的,还是会因为对Enterprise-Data-3.0存在测试依赖而通过?它当前已通过,但我不确定测试依赖项是否足够。
不过,您始终可以在test-b中使用依赖项管理来修复要使用的每个依赖项的版本。
这篇关于Maven-从x管理的版本,是否因重复而被省略?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Maven-从x管理的版本,是否因重复而被省略?
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01