常春藤:<常春藤:设置>与<常春藤:配置> </ivy:配置> </常春藤:设置>

时间:2012-11-28 16:46:04

标签: ivy

我有一个常春藤大师项目,其他人通过svn:externals属性包含在他们的项目中。该项目包含Ivy jar,连接到我们项目的默认ivysettings.xml文件,以及一些Ant宏,它允许我标准化我们构建jar的方式等。(例如,用户使用<jar.macro> vs. <jar><jar.macro>使用相同的参数,但也会自动将pom.xml嵌入到jar中,并将Jenkins构建信息添加到Manifest中。

我们还使用Jenkins作为我们的持续集成系统。我想做的其中一件事是清理每个构建的常春藤缓存,因此我们没有因缓存问题而导致任何jar问题。为此,我设置了ivysettings.xml文件,为每个Jenkins执行器定义一个单独的缓存:

<ivysettings>
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/>
    <caches
        defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
        resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>
    <settings defaultResolver="default"/>
    <include file="${ivy.dir}/ivysettings-public.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>

我最初使用<ivy:settings>任务来配置Ivy的项目。但是,所有Jenkins执行程序都使用相同的常春藤缓存,这会导致问题。我从<ivy:settings>切换到<ivy:configure>,问题就消失了。显然,<ivy:configure>会立即设置Ivy(从而正确设置缓存),而<ivy:settings><ivy:resolve>被调用之前不会设置Ivy。

我在Nabble上看过一些关于<ivy:configure>被弃用(或许不是)的电子邮件。我在常春藤在线文档中没有看到任何内容,说明<ivy:configure>已被弃用。

那么,您何时会使用<ivy:settings><ivy:configure>。在我的情况下,由于我需要为每个Jenkins执行程序提供单独的缓存,我需要使用<ivy:configure>,但是有理由我可以<ivy:settings>使用<ivy:configure>吗?并且<ivy:configure>已被弃用?

1 个答案:

答案 0 :(得分:4)

这是我发现的:

  • <ivy:settings>较新且首选方式。
  • <ivy:configure>可能已弃用,也可能未被弃用。
  • <ivy:settings>在调用<ivy:resolve>之前未设置常春藤设置,而<ivy:configure>会在执行任务后立即设置所有常春藤设置。

最后一个是我的问题。由于我有并行的Jenkins构建,我想用完全干净的缓存开始每个构建,我使用自定义缓存设置,具体取决于Jenkins执行器编号。缓存标记为cache-0cache-5

但是,由于在我致电<ivy:settings>之前未执行<ivy:resolve>,因此我的自定义缓存设置未被提取。在我调用Ivy resolve之前调用<ivy:cleancache>会导致构建清除公共缓存。随之而来的是欢闹。使用<ivy:cofnfigure>修复了此问题。