5

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

我们还使用 Jenkins 作为我们的持续集成系统。我想做的一件事是为每个构建清理 Ivy 缓存,这样我们就不会因为缓存问题而出现任何 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 缓存,这会导致问题。我切换<ivy:settings><ivy:configure>,问题就消失了。显然,<ivy:configure>立即设置常春藤(从而正确设置缓存),而<ivy:settings>直到<ivy:resolve>被调用时才设置常春藤。

我在 Nabble 上看到了一些关于<ivy:configure>被弃用(或者可能不是)的电子邮件。我在 Ivy 在线文档中没有看到任何说明<ivy:configure>已弃用的内容。

那么,你什么时候使用<ivy:settings>vs. <ivy:configure>. 就我而言,因为我需要为每个 Jenkins 执行程序单独缓存,所以我需要使用<ivy:configure>,但是有什么理由可以使用<ivy:settings>over<ivy:configure>吗?而且,被<ivy:configure>弃用了吗?

4

1 回答 1

4

这是我发现的:

  • <ivy:settings>是较新的首选方式。
  • <ivy:configure>可能会或可能不会被弃用。
  • <ivy:settings>直到<ivy:resolve>被调用时才设置我的 Ivy 设置,而<ivy:configure>在任务执行后立即设置所有 Ivy 设置。

最后一个是我的问题。由于我正在进行并行 Jenkins 构建,并且我想以完全干净的缓存开始每个构建,因此我使用自定义缓存设置,具体取决于 Jenkins 执行程序编号。cache-0缓存通过标记cache-5

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

于 2013-01-17T23:34:15.470 回答