ivy的override标签和force = true属性有什么区别?

时间:2015-03-17 05:24:51

标签: java eclipse ant intellij-idea ivy

这是一个例子。我们正在处理 ivy 2.1 ant 1.8.3 。我们的一个项目直接依赖于' math'版本5.1 ' common'版本1.4.6 。但是,常见的'直接依赖' 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>

确定该决议将收集&#39;数学&#39;版本5.2 由于&#39; 常见的直接依赖性。 由于它会导致编译器错误,我想使用&#39; math&#39; 5.1 因此我试图在所有依赖标记之后将正确的覆盖标记放入ivy xml中:

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

它应该工作并只收集版本5.1。事实证明它实际上可以在 IntelliJ IDEA 14 Eclipse 4.3 中工作,所以在相应的常春藤插件的解析之后,我只能看到& #39;数学&#39;项目库中的5.1版。我在Ivy Visualizer视图中检查了依赖图,看起来很好。

然而,当我使用一个合适的ant构建目标时,它会因编译错误而失败,因为它解析了&#39; math&#39;版本5.2 而不是5.1( !! )。

根据常春藤的文档覆盖

  当直接依赖带来传递时,

&#34;会很有用   您想要更改修订的依赖项,而不是实际的   声明对它的依赖&#34;

还声称

  

在称为依赖项的阶段中,覆盖在其他任何事件之前完成   描述符调解。传递依赖性的行为完全如同   如果它是用新值声明的。

因此它也应该与ant build一起使用,但表现与预期相矛盾。 最终我们发现依赖标记的force属性( force =&#34; true&#34; )是抢救结果IDE之后的预期库结构&#39;并在蚂蚁构建决议之后。基于常春藤文档:

  

...依赖元素也支持一个force属性(从0.8开始),   这表明冲突经理强制修改   依赖于这里给出的依赖。

为什么覆盖标记会导致不同工具的矛盾行为以及为什么强制=&#34; true&#34;有效吗?如果有人能突出(轻微的)差异,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

我今天确实遇到了一个开发人员的问题,其中的force =“ true”似乎有效(摘要显示选择正确版本(强制版本)时发生冲突)。但是随后,由于单个文件发生冲突,它选择了退出模块的版本,不知道为什么。