Maven - 从 x 管理的版本,省略重复?

2022-09-02 04:46:48

我无法理解当maven依赖关系树声明从x管理的版本时会发生什么;省略重复。

例如,假设我已经在 的依赖关系管理部分中定义了。enterprise-data-2.4server-a

我在其中一个依赖关系的依赖关系树中得到以下内容。server-aserver-benterprise-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-benterprise-data-2.4server-aenterprise-data-2.4

但是,我有依赖于的代码,并且具有编译时依赖性。server-benterprise-data-3.0server-benterprise-data-3.0

现在,我有一个测试项目,假设哪些测试jar存在于项目中,并且具有对的测试依赖性。这些测试直接命中 了 上存在的代码。test-bserver-bserver-aenterprise-data-3.0server-a

当我在 中运行测试时,如果在 尝试访问 中存在的功能时遇到错误,因为它没有被拉入,或者它会通过,因为存在测试依赖性?它目前通过,但我不确定测试依赖关系如何足够。test-benterprise-data-3.0server-aenterprise-data-3.0

请帮我理解。

编辑:我正在使用.maven-3

谢谢。


答案 1

例如,假设我在 server-a 的依赖关系管理部分中定义了 enterprise-data-2.4

然后,您始终可以获得2.4,即使只有依赖于1.8的JAR。依赖关系管理将覆盖依赖关系中介。

假设server-benterprise-data-2.4中唯一的jar,我的理解是server-a将始终在这里拉入enterprise-data-2.4。这是正确的吗?

假设您没有依赖关系管理,那么是的。如果有多个依赖项依赖于不同的版本,则根据 Maven 版本 > 2.0.9 的依赖项中介规则,首先加载哪个依赖项(及其传递依赖项)是一个问题。其他将是:“从x管理并省略重复”。

当我在 test-b 中运行测试时,我是否在尝试访问 enterprise-data-3.0 中存在的功能时遇到错误,因为它没有被 server-a 拉入,还是会因为企业数据 3.0 的测试依赖性而通过?它目前通过,但我不确定测试依赖关系如何足够。

如果它使用不兼容的代码拉取了错误的版本,是的,您将看到错误。对于 Maven 3,使用 3.0 定义测试范围依赖关系,使用 2.4 定义编译范围依赖关系将意味着 Maven 将覆盖 2.4,并使用在测试范围上定义的较新的依赖项。有关更多详细信息,请参阅此问题及其答案

但是,您始终可以在 test-b 中使用依赖关系管理来修复要使用的每个依赖项的版本。


答案 2

推荐