2

我无法理解 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 存储库和一个对默认本地的引用。当我想解决我的依赖关系时,我使用这个链。

我构建指定的工件并将其发布到本地,状态为“集成”,修订版为“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”的依赖项。

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

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

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

提问者提到了一个甚至不同的行为,即最新的被拾取(解析器的顺序甚至无关紧要)。

所以总结一下并抱歉延长:如何获得神器:

1) 无论位置如何,始终是 latest.integration (最新的)。

2) 始终来自本地,即使其他位置有更新的集成版本。

3)我就那么无知吗?

4

2 回答 2

1

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

如何使用 ivy 和 nexus 发布 3rdparty 工件

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

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

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

于 2012-06-15T15:54:53.630 回答
0

毕竟,我可以设法使订单微不足道。

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

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

<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>
于 2012-06-19T17:41:16.923 回答