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

时间:2011-01-07 23:11:05

标签: hudson ivy dependency-management

假设:

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

活动:

  1. 对项目A进行API更改。
  2. 对项目B进行了相关更改。
  3. 项目版本2.2.3已构建并发布到存储库。
  4. 5分钟后,构建了B项1.1.2版。
  5. 项目B失败,仍然从常春藤缓存中提取项目A版本2.2.2。
  6. 5分钟后,项目B将正确构建,项目A版本为2.2.3
  7. 我看过,但没有看到明显的解决方案(除了没有缓存?)。发布上是否有更新本地缓存和存储库的设置?您是否需要明确发布到两者?

2 个答案:

答案 0 :(得分:0)

只是推测:如果A和B是在同一台机器上构建的,那么就可以进行< ivy:resolve refresh =“true”>在A的构建结束时刷新缓存?如果A和B建立在不同的机器上,那当然没有帮助......

答案 1 :(得分:0)

一个解决方案,类似于(但不是很糟糕)不缓存是通过设置以下常春藤属性来减少缓存中的时间:

ivy.cache.ttl.default                 = 30s

现在也许这会解决你的问题。虽然,它并不比不缓存好多了。

在我的脑海中,我可能尝试的另一件事是关闭缓存,然后通过在常春藤设置文件中创建指向缓存的文件系统解析器来手动重新实现缓存把它放在链条下面。这看起来像这样:

<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.dir ivy.local.default.ivy.pattern ivy.local.default.artifact .pattern 是默认设置的内置属性。我在这个示例中引用了它们,但我不需要做任何其他特殊工作来设置它们(它们已包含正确的默认值)。

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