【问题标题】:Defining the behavior of "latest.integration" in Ivy在 Ivy 中定义“latest.integration”的行为
【发布时间】:2012-06-18 15:24:41
【问题描述】:

我无法理解 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) 我就这么无知吗?

【问题讨论】:

  • 您是否在上述任一发布结构中的任何位置看到集成一词 - 没有。实际上,您在发布期间根本没有指定状态,因此 latest.integration 将不起作用。

标签: ivy dependency-management


【解决方案1】:

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

how to publish 3rdparty artifacts with ivy and nexus

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

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

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

【讨论】:

  • 这需要对我的部分进行一些测试,我周末不在办公室。但是,本地存储库将用于本地开发,开发人员希望使用正在进行的 B 项目版本测试他们正在进行的 A 项目版本。为此使用关系意味着共享开发工件,这不是我们想要的。我将测试 POM,我希望它们的行为更加一致。最后一件事,您提供的示例是我对这个 IVY 事物的教程之一。谢谢大佬。
  • @EyadEbrahim 很高兴为您提供帮助。对于 ivy 来说,在本地保存开发快照肯定会更简单。如果 Nexus 仅用于发布,那么我的最后一条建议是检查 ivy buildnumber 任务。您会发现它对于根据之前发布的内容增加版本号非常有用。
【解决方案2】:

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

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

我在链解析器和 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>

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 2012-08-06
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2023-03-13
    • 2013-08-21
    相关资源
    最近更新 更多