使用Ivy控制上游依赖关系的依赖关系的方法?

时间:2011-07-08 15:55:45

标签: ivy

我正在使用Ivy从内部开发和第三方库中组装复合应用程序。 Ivy用于管理构建上述库的依赖项。对于每个库,有多个可用的兼容版本,可以在组装的应用程序中使用。问题是如何指导常春藤不要选择最新版本的依赖项。让我用以下例子来说明:

  • A [3]:[2.5 +] B,C [1.3 +]

意味着包A依赖于任何版本2.5.0-2.5.X的B包(在2.5分支内没有重大更改,这意味着该范围内的所有版本都是兼容的)。相同的逻辑适用于C.

在应用程序组装时,我定义了一个Ivy.xml文件,它只是说:

  • 应用:A [3]

这将指示Ivy在A兼容的范围内提取B和C的所有最新版本。由于一些业务限制,我还要“说”:“而不是定义范围内的最新版本的B使用版本2.5.6”(假设2.5.7也存在)。所以,而不是上面我想说的话:

  • 应用:A [3],B [2.5.6]

问题是Ivy将驱逐B [2.5.6]而支持2.5.7。因此必须使用某种冲突管理器。我正在考虑最新兼容,希望它允许指定一个额外的范围。我找不到一个例子。我的猜测是正确的,当然......

2 个答案:

答案 0 :(得分:2)

dependency声明中的强制属性可能就是您所需要的。

如果这不起作用,我建议阅读有关冲突管理的常春藤文档:

答案 1 :(得分:2)

答案太近了,我看不出来......

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">    
<info organisation="some" module="application" />

<publications>
    <artifact name="application" ext="zip" />
</publications>

<dependencies>
    <dependency org="some" name="A" rev="2.8.+" branch="2.8">
        <artifact name="A" ext="zip"/>
    </dependency>
    <dependency org="some" name="B" rev="2.5.6" branch="2.5">
        <artifact name="B" ext="zip"/>
    </dependency>
    <conflict org="some" module="B" rev="2.5.6"/>
</dependencies>

希望它可以帮助别人: - )