【问题标题】:What is the difference between ivy's override tag and force=true attribute?ivy 的 override 标签和 force=true 属性有什么区别?
【发布时间】:2015-05-19 10:54:28
【问题描述】:

这是一个例子。我们正在处理 ivy 2.1ant 1.8.3。我们的一个项目直接依赖于 'math' 版本 5.1'common' 版本 1.4.6。但是 'common' 直接依赖于 'math' 版本 5.2

<dependencies>
   <dependency org="home" name="math" revision="5.1" conf="runtime" />
   <dependency org="home" name="common" revision="1.4.6" conf="runtime" />
</dependencies>

由于 'common 的直接依赖关系,可以肯定该解析将收集 'math' 版本 5.2。 由于它会导致编译器错误,我想使用 'math' 5.1,因此我尝试在所有依赖项标签之后将正确的 override 标签放入 ivy xml:

<override org="home" module="math" rev="5.1" />

它应该工作并且只收集 5.1 版本。事实证明,它实际上在 IntelliJ IDEA 14Eclipse 4.3 中工作,所以在各自的 ivy 插件解析之后,我只能看到 'math' 版本 5.1 在项目的库中。我检查了 Ivy Visualizer 视图中的依赖关系图,看起来还不错。

但是,当我使用合适的 ant 构建目标之一时,它会因编译错误而失败,因为它解析的是 'math' 版本 5.2 而不是 5.1(!!)。

根据 ivy 的文档覆盖

" 在直接依赖带来传递性时很有用 您想要更改修订版的依赖项,实际上没有 声明对它的依赖”

据说

覆盖在任何其他操作之前完成,在一个称为依赖的阶段 描述符中介。然后传递依赖的行为与 如果它是用新值声明的。

因此它也应该与 ant build 一起使用,但行为与预期相矛盾。 最终我们发现依赖标签的 force 属性 (force="true") 是救援,它在 IDE 和 ant 之后产生了预期的库结构建立分辨率。基于常春藤文档:

...dependency 元素还支持一个 force 属性(从 0.8 开始), 指示冲突管理器强制进行修订 与此处给出的依赖关系。

为什么覆盖标签会导致不同工具的矛盾行为以及为什么 force="true" 有效?如果有人能突出(轻微?)差异,我将不胜感激。

【问题讨论】:

    标签: java eclipse ant intellij-idea ivy


    【解决方案1】:

    我从未使用过覆盖功能,但一直使用 force="true",它在“大多数”情况下效果很好。

    我今天确实遇到了我的一位开发人员的问题,其中 force="true" 似乎正在工作(摘要显示选择正确版本(强制版本)的冲突)。但是在发生个别文件冲突之后,它选择了被驱逐模块的版本,不知道为什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2011-11-14
      • 2015-02-12
      • 2021-05-13
      • 2011-08-13
      • 2012-01-01
      相关资源
      最近更新 更多