Ivy发布到仓库后未更新本地缓存

3

给定:

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

事件:

  1. 对Project A进行API更改。
  2. 对Project B进行相关更改。
  3. 构建并发布了Project A版本2.2.3到存储库。
  4. 不到5分钟后,构建了Project B版本1.1.2。
  5. Project B失败,仍从Ivy Cache中拉取Project A版本2.2.2。
  6. 5分钟后,Project B将正确构建,并使用Project A版本2.2.3。

我已经查看过,但没有明显的解决方案(除了不缓存?)。是否有发布设置可以更新本地缓存和存储库?需要同时显式发布吗?

3个回答

0
一种解决方案,类似于(但不像)不缓存的那么糟糕,是通过设置以下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 是内置属性,已经默认设置好了。在这个例子中我引用了它们,但我不需要做任何特殊的努力来设置它们(它们已经包含了适当的默认值)。

希望这些方法之一可以解决您的问题。这是我现在能想到的唯一两种可能的解决方案。


0
在B项目的ivy文件中,您需要将依赖项的changing属性设置为true。
  <dependency org="org.example" name="A" revision="latest.integration" changing="true" />

查看ivy文档


0

仅仅是猜测:如果A和B都是在同一台机器上构建的,那么在A的构建结束时执行一个<ivy:resolve refresh="true">会刷新缓存吗?当然,如果A和B是在不同的机器上构建的,这并没有帮助...


我认为你在那里漏掉了一个关键词“在结尾处进行[?]”,这非常扣人心弦。 - Instantsoup
@Instantsoup:抱歉,我忘记转义角括号了。 :-) - Chris Dolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接