Ivy: <ivy:settings>与<ivy:configure>的区别

5
我有一个主要的Ivy项目,他人通过svn:externals属性将其包含在其项目中。该项目包含Ivy jar、连接到我们项目的默认ivysettings.xml文件以及一些Ant宏,使我能够标准化我们构建jar等的方式。(例如,用户使用<jar.macro>而不是<jar><jar.macro>使用相同的参数,但还自动将嵌入jar,并将Jenkins构建信息添加到Manifest中)。
我们还使用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(因此正确设置了缓存),而<ivy:settings>直到调用<ivy:resolve>才设置Ivy。

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

那么,什么情况下应该使用<ivy:settings><ivy:configure>呢?在我的情况下,由于我需要为每个Jenkins执行器使用单独的缓存,所以我需要使用<ivy:configure>,但是否有理由使用<ivy:settings>而不是<ivy:configure>呢?<ivy:configure>是否已被弃用?


很好的问题。我从未使用过“configure”任务。我认为“settings”任务更有用,因为它可以让您执行多个ivy解析任务,使用多个ivy设置文件。由于我很少调用ivy解析超过一次,因此在我的情况下似乎没有真正的功能差异 :-) - Mark O'Connor
除了 <ivy:configure><ivy:settings> 都可以使用 _settings ID_,因此它们似乎都能够使用多个设置和多个解析。在 <ivy:settings> 文档中明确提到了这一点,但是似乎两个任务都支持此功能。我相信 <ivy:settings> 是在 Ivy 2.x 中默认使用的,但在我的情况下,我的 <ivy:cleancache> 导致了与 <ivy:settings> 不同的问题,但没有与 <ivy:configure> 发生问题。 - David W.
也许最好将这个问题发布到开发者邮件列表上。就像我说的那样,在构建过程中我很少执行 ivy resolve 操作超过一次。这就解释了为什么我从不需要指定设置 ID。是的,这有点难以理解。 - Mark O'Connor
我已经在用户邮件列表上发布了这个问题。我需要看看是否会得到任何回复。如果没有,我将在开发者列表上发布它。 - David W.
1个回答

4
这是我找到的内容:
  • <ivy:settings> 是更新的、首选的方式。
  • <ivy:configure> 可能被废弃。
  • <ivy:settings> 直到调用 <ivy:resolve> 时才设置我的 Ivy 设置,而 <ivy:configure> 在任务执行时立即设置所有 Ivy 设置。

最后一点是我的问题。由于我有并行的 Jenkins 构建,并且我想以完全干净的缓存开始每个构建,因此我根据 Jenkins 执行器编号使用自定义缓存设置。这些缓存被标记为 cache-0cache-5

但是,由于 <ivy:settings> 直到我调用 <ivy:resolve> 时才执行,我的自定义缓存设置没有被使用。我在调用 Ivy 解析之前调用 <ivy:cleancache>,导致构建清空了一个共同的缓存。可笑的事情发生了。使用 <ivy:configure> 可以解决这个问题。


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