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

时间:2014-12-19 19:33:54

标签: java maven dependency-management

我很难理解maven依赖树在发布x管理版本时会发生什么;省略重复。

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

我在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-benterprise-data-2.4唯一的内容,我的理解是server-a将始终在此处enterprise-data-2.4。这是对的吗?

但是,server-b中的代码依赖于enterprise-data-3.0server-benterprise-data-3.0具有编译时依赖性。

现在,我有一个测试项目,让我们说test-b测试server-b项目中存在的server-a jar,并且对enterprise-data-3.0具有测试依赖性。这些测试直接命中server-a上的代码。

当我在test-b中运行我的测试时,如果我尝试访问enterprise-data-3.0中存在的功能时会出现错误,因为server-a没有提及或者它会通过因为enterprise-data-3.0存在测试依赖性?它目前通过,但我不确定测试依赖是否足够。

请帮我理解。

修改:我正在使用maven-3

感谢。

1 个答案:

答案 0 :(得分:3)

  

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

然后你总是得到2.4,即使只有JAR依赖于1.8。依赖关系管理会覆盖依赖关系中介。

  

假设 server-b 是唯一一个拉入 enterprise-data-2.4 的jar,我的理解是 server-a 总会拉在 enterprise-data-2.4 这里。这是对的吗?

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

  

当我在 test-b 中运行我的测试时,如果我在尝试访问 enterprise-data-3.0 中存在的功能时会出现错误,因为它不是由 server-a 引入或者是否会通过,因为 enterprise-data-3.0 存在测试依赖性?它目前通过,但我不确定测试依赖是否足够。

如果它使用不兼容的代码拉错了版本,是的,您会看到错误。对于Maven 3,使用3.0定义测试范围依赖关系并使用2.4编译范围依赖关系将意味着Maven会覆盖2.4并使用在测试范围上定义的较新版本。有关详细信息,请参阅this question and its answers

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