我在理解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)我是否一无所知?
答案 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>