Hudson Ivy发布到存储库不';不更新本地缓存

Hudson Ivy发布到存储库不';不更新本地缓存,hudson,ivy,dependency-management,Hudson,Ivy,Dependency Management,鉴于: 使用Hudson/Ant构建 常春藤缓存超时设置为5分钟 Ivy存储库包含项目A版本2.2.2和项目B版本1.1.1 项目B依赖于项目A 活动: API对项目A进行了更改 对项目B进行了相关变更 Project A版本2.2.3已生成并发布到存储库中 5分钟后,ProjectB版本1.1.2构建完成 项目B失败,仍然从常春藤缓存中拉入项目A版本2.2.2 5分钟后,Project B将正确生成Project A版本2.2.3 我已经看过了,但没有看到明显的解决方案(除了不缓存?)。发

鉴于:

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

  • API对项目A进行了更改
  • 对项目B进行了相关变更
  • Project A版本2.2.3已生成并发布到存储库中
  • 5分钟后,ProjectB版本1.1.2构建完成
  • 项目B失败,仍然从常春藤缓存中拉入项目A版本2.2.2
  • 5分钟后,Project B将正确生成Project A版本2.2.3

  • 我已经看过了,但没有看到明显的解决方案(除了不缓存?)。发布时是否有更新本地缓存和repo的设置?您是否需要显式发布到两者?

    只是猜测:如果A和B构建在同一台机器上,在A的构建结束时执行A是否会刷新缓存?当然,如果A和B构建在不同的机器上,这没有帮助…

    一种类似于(但没有那么糟糕)不缓存的解决方案是通过设置以下常春藤属性来减少缓存中的内容的生存时间:

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


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

    我想你错过了其中的一个关键词“最后做一个[?]”,这非常扣人心弦。@Instantsoup:对不起,我忘了跳过尖括号。:-)