gpt4 book ai didi

java - dependencyManagement 的传递效应

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:52 24 4
gpt4 key购买 nike

在 Maven 中,您可以通过 dependencyManagement 中的条目覆盖传递依赖项的版本号,因为 dependencyManagement 优先于传递依赖项定义。

但是(传递)依赖项的 pom 中的 dependencyManagement 定义呢?他们被考虑了吗?如果是这样,它们覆盖了什么,它们是如何被覆盖的?

最佳答案

依赖管理暗示是可传递的。不需要为此制定特殊规则,而是已经提到的规则的结果:Transitive Dependencies .

考虑这个示例结构:

  • 你的模块
    • A - 依赖
      • D - 传递依赖
    • B - 依赖
      • D - 传递依赖

AB 构建时,它们相应的 dependencyManagement 部分被检查以选择 D 的版本,如果没有明确指定。 这是重要的部分:AB 用作依赖项以确定 D< 的版本时,使用完全相同的过程 他们依赖。因此,它们不会以任何方式相互影响。

例如,这可能导致 A 取决于 D:1.0,而 B 取决于 D:1.1,它们的 dependencyManagement 部分已经在此时应用以确定这一点,将不再考虑。将此信息作为输入,应用依赖调解规则为您的模块只选择一个版本的 D

依赖调解规则也在链接页面中描述。但简而言之,最接近的定义获胜,平局根据顺序被打破。自然地,模块本身中的定义总是最接近的。

现在假设您的模块被用作依赖项。由于 dependencyManagement 部分中的定义,您的项目可能依赖于基于上述所有规则的 D:1.2,但这就是您的 dependencyManagement 结束。

(请注意,import 作用域是一个异常(exception),因为它的行为与其他作用域完全不同。)

关于java - dependencyManagement 的传递效应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com