在Ivy中定义“latest.integration”的行为

时间:2012-06-15 14:30:00

标签: ivy dependency-management

我在理解latest.integration的工作方式时遇到了问题。

我有一个例子没有提供以下提到的输出: http://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html

其中说,无论发布时间如何,本地解析器都优先于其他解析器。

我的ivysettings.xml是这样的:

<resolvers>
<chain name="download-chain" returnFirst="false" >
    <url name="nexus-repo" m2compatible="true" >
        <artifact pattern="${nexus}/[organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]" />
        <ivy pattern="${nexus}/[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" />
    </url>
    <resolver ref="local" />
</chain>
</resolvers>

这里我声明我有一个nexus url存储库和对默认本地的引用。当我想解决我的依赖关系时,我使用这个链。

我构建指定的工件并将其发布到本地,状态为“integration”,并带有修订版“HEAD”(类似于我们的SNAPSHOT),首先使用本地解析器:

<ivy:publish 
    overwrite="yes"
    update="true"
    artifactspattern="${project.dist.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    resolver="local"
    settingsRef="ivy.nexus"
/>

再次重建并将其发布到nexus存储库:

<ivy:publish 
    overwrite="yes"
    update="true"
    artifactspattern="${project.dist.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    resolver="publish-url"
    forcedeliver="true"
    settingsRef="ivy.nexus"
/>

我有另一个项目,它将前一个工件声明为版本“latest.integration”的依赖项。

我希望无论声明的解析器的顺序如何,都应该从本地存储库下载工件。但事实并非如此。下载的工件始终是首先提到的解析器。更改“本地”解析程序的名称不会影响任何内容。订单总是重要的。

我尝试将changing =“true”附加到我的依赖项中。它没有帮助。

在这个问题中: Ivy: Forcing local snapshot for dependency

Asker提到了一种甚至不同的行为,即最新的行为被提起(解析器的顺序甚至不重要)。

所以要把它包起来并抱歉延长: 如何获得神器:

1)总是最新的整合(最新的),无论位置如何。

2)即使在其他地方有更新的集成版本,也总是来自本地。

3)我是否一无所知?

2 个答案:

答案 0 :(得分:1)

我建议您阅读以下关于向Nexus发布工件的答案

how to publish 3rdparty artifacts with ivy and nexus

使用ibiblio解析器,它更简单。

第二条建议是在ANT逻辑中明确区分集成和发布版本。前者可以使用时间戳作为修订版,而后者需要有一个策略来维护递增的修订版号(这是一个完全不同的问题)。 Maven称这些“SNAPSHOT”或“Release”构建并实现两种不同类型的存储库来支持它们。

最后一条建议是避免使用本地存储库,除非您决定存储集成构建。 Ivy维护着下载工件的本地缓存,很少值得努力或维护本地存储。

答案 1 :(得分:0)

毕竟,我可以设法使订单无关紧要。

我不确定我应该走多远但是:

我在链解析器和URL解析器中使用了最新的=“最新时间”。 然而这还不够,当我调试代码时,我发现每个解析器都由它自己的'最新'判断。 所以我像这样覆盖了本地存储库:

<filesystem name="local" latest="latest-time" > 
    <ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}"/>
    <artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}"/>
</filesystem>