当前位置: 首页 > 知识库问答 >
问题:

定义Ivy中“最新集成”的行为

谷梁永年
2023-03-14

我很难理解latest.integration是如何工作的。

我有一个例子,没有给出输出中提到:http://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html

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

我的常春藤.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"
/>

我有另一个项目,它将以前的工件声明为修订版“最新.集成”的依赖关系。

我希望工件应该从本地存储库中下载,而不考虑声明的解析器的顺序。但事实并非如此。下载的工件总是首先提到的解析器。更改“本地”解析器的名称不会产生任何影响。顺序永远是最重要的。

我尝试将更改=“true”附加到我的依赖项。这无济于事。

在这个问题中:Ivy:强制依赖本地快照

Asker提到了一种甚至不同的行为,即选择最新的(解析器的顺序甚至无关紧要)。

所以总结一下,很抱歉延长了:如何获得一个工件:

1)始终最新的集成(最新的),无论位置如何。

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

3) 我有那么笨吗?

共有2个答案

经福
2023-03-14

我可以设法使订单变得微不足道。

我不知道我应该走多远,但是:

我在链解析器和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>
连翰
2023-03-14

我推荐阅读以下关于向Nexus发布工件的回答

如何用ivy和nexus发布第三方工件

使用ibiblio解析器,简单多了。

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

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

 类似资料:
  • 我从Gradle得到以下错误 这是我的建筑Gradle 调试运行表明它试图用Ivy而不是Maven解决依赖关系?

  • 问题内容: 在台湾,我们有一种称为“ Unicode At One(UAO)”的字符编码,它是对BIG-5的扩展,但Java和Android不支持。 代码页位于http://moztw.org/docs/big5/table/uao241-b2u.txt 我的问题是,如何使用此字符集构建具有字节数组数据的String对象? 我想我将扩展String类并在其中进行一些操作,但是我不知道如何创建新的C

  • 22.7.2.定义一个新的 source set 要定义一个新的源组, sourceSets {} 块中引用它.下面是一个例子: 例22.5.定义一个新的 source set build.gradle sourceSets { intTest } 当你定义一个新的 source set, java 插件会为该 source set 添加一些如Table 22.6, “Java plugi

  • 问题内容: 我对Ivy相当陌生,所以也许有一种直接的方法,我无法在文档中找到它,或者我所寻找的东西是不可能的,但是这里有。我希望能够指定源代码位于使用不同协议的本地和/或远程服务器上的依赖项。 具体来说,我有一些项目依赖项存储在本地网络 TFS 服务器上,其他项目依赖项存储在远程 Git 服务器上(更精确地讲)。Ivy是否可以下载源代码并构建一个 jar 文件,然后将其用作依赖项?如果是这样,怎么

  • 问题内容: 它允许您从调用中返回子类。 我正在尝试找出使用Swift实现相同功能的最佳方法。 我确实知道,很可能有一种更好的方法可以用Swift实现相同的目的。但是,我的类将由我无法控制的现有Obj- C库初始化。因此,它确实需要以这种方式工作并且可以从Obj-C调用。 任何指针将不胜感激。 问题答案: 我不相信Swift可以直接支持这种模式,因为初始化程序不会像在Objective C中那样返回

  • 对于我的暑期实习项目,我正在尝试在多个节点上分配作业。但是,我想根据谓词(cpu使用情况)以编程方式创建自定义集群组,就像在Apache Ignite中一样。我的公司已经使用Hazelcast IMDG。Hazelcast是否提供类似的功能?我知道我可以根据组名称创建不同的Hazelcast实例,但有没有办法使用cpu指标在Hazelcast中创建自定义集群组?