常春藤发布到存储库不会更新本地缓存

Posted

技术标签:

【中文标题】常春藤发布到存储库不会更新本地缓存【英文标题】:Ivy publish to repository doesn't update local cache 【发布时间】:2011-06-05 14:11:55 【问题描述】:

给定:

使用 Hudson/Ant 构建。 Ivy 缓存超时设置为 5 分钟。 Ivy 存储库包含项目 A 版本 2.2.2 和项目 B 版本 1.1.1。 项目 B 依赖于项目 A。

事件:

    对项目 A 进行了 API 更改。 对项目 B 进行了相关更改。 项目 A 版本 2.2.3 已构建并发布到存储库。 不到 5 分钟,项目 B 版本 1.1.2 构建完成。 项目 B 失败,仍然从 Ivy 缓存中提取项目 A 版本 2.2.2。 5 分钟后,项目 B 将正确构建,项目 A 版本为 2.2.3

我看过但没有看到明显的解决方案(除了不缓存?)。是否有发布设置会更新本地缓存和存储库?是否需要明确发布到两者?

【问题讨论】:

【参考方案1】:

只是推测:如果 A 和 B 构建在同一台机器上,是否会在 A 构建结束时执行 刷新缓存?当然,如果 A 和 B 在不同的机器上构建,那也无济于事......

【讨论】:

我认为你错过了一个关键词“在结尾处做一个 [?]”,这非常悬念。 @Instantsoup:对不起,我忘了转义尖括号。 :-)【参考方案2】:

一种类似于(但不如不缓存)不缓存的解决方案是通过设置以下 ivy 属性来减少事物在缓存中的生存时间:

ivy.cache.ttl.default                 = 30s

也许现在可以解决您的问题。虽然,它并不比不缓存好多少。

在我的脑海中,我可能会尝试的另一件事是关闭缓存,然后通过在您的 ivy 设置文件中创建一个指向缓存的文件系统解析器手动重新实现缓存,并且将其放在链条的下方。看起来像这样:

<ivysettings>
    <settings defaultResolver="all-repositories" />
    <include file="ivysettings-common.xml" />
    <resolvers>
        <chain name="all-repositories" returnFirst="true" >
            ...
            <ibiblio name="ibiblio" m2compatible="true" />
            <filesystem name="manual-cache">
                <ivy pattern="$ivy.default.ivy.user.dir/cache/$ivy.local.default.ivy.pattern" />
                <artifact pattern="$ivy.default.ivy.user.dir/cache/$ivy.local.default.artifact.pattern" />
            </filesystem>
            ...
        </chain>    
    </resolvers>
</ivysettings>

注意:ivy.default.ivy.user.dirivy.local.default.ivy.patternivy.local.default.artifact .pattern 是默认设置的内置属性。我在这个例子中引用了它们,但我不需要做任何其他特别的努力来设置它们(它们已经包含正确的默认值)。

我希望其中一种方法可以解决您的问题。这是目前唯一想到的两种可能的解决方案。

【讨论】:

【参考方案3】:

在项目B的ivy文件中,需要将依赖的changeing属性设置为true。

  <dependency org="org.example" name="A" revision="latest.integration" changing="true" />

See the ivy documentation

【讨论】:

以上是关于常春藤发布到存储库不会更新本地缓存的主要内容,如果未能解决你的问题,请参考以下文章

常春藤从常春藤缓存中删除不需要的(旧)工件

如何让 Grails 从 Maven 存储库中获取最新的本地 jars?

解决常春藤的最佳链

Gradle - 将第三方依赖项安装到本地常春藤存储库中

本地存储库的好常春藤教程? [关闭]

github存储库的本地缓存?