【问题标题】:Ivy: <ivy:settings> vs. <ivy:configure>常春藤:<ivy:settings> vs. <ivy:configure>
【发布时间】:2012-11-16 14:29:38
【问题描述】:

我有一个主 Ivy 项目,其他人通过 svn:externals 属性将其包含在他们的项目中。该项目包含 Ivy jar,连接到我们项目的默认 ivysettings.xml 文件,以及一些允许我标准化构建 jar 的方式的 Ant 宏等(例如,用户使用 &lt;jar.macro&gt; 与 @987654323 @.&lt;jar.macro&gt; 使用相同的参数,但也会自动将 pom.xml 嵌入到 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>

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

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

那么,您什么时候使用&lt;ivy:settings&gt;&lt;ivy:configure&gt;。就我而言,因为我需要为每个 Jenkins 执行程序单独缓存,所以我需要使用 &lt;ivy:configure&gt;,但是我是否有理由使用 &lt;ivy:settings&gt; 而不是 &lt;ivy:configure&gt;?而且,&lt;ivy:configure&gt; 是否已弃用?

【问题讨论】:

  • 很好的问题。我从未使用过“配置”任务。我怀疑设置任务更有用,因为它可以让您使用多个常春藤设置文件执行多个常春藤解析任务。由于我很少多次调用常春藤解析,因此在我的案例中,任务之间似乎没有真正的功能差异:-)
  • 除了&lt;ivy:configure&gt;&lt;ivy:settings&gt; 都可以采用设置ID,所以它们似乎都可以使用多个设置和多个解析。它在&lt;ivy:settings&gt; 文档中明确提到了这一点,但似乎这两个任务都支持此功能。我相信 &lt;ivy:settings&gt; 是 Ivy 2.x 中使用的默认值,但在我的情况下,我的 &lt;ivy:cleancache&gt; 导致 &lt;ivy:settings&gt; 出现问题,但 &lt;ivy:configure&gt; 没有出现问题。
  • 也许这个问题最好发布到开发者邮件列表中。就像我说的那样,我很少在构建中多次执行常春藤解析。这就解释了为什么我从不需要指定设置 ID。是的,这有点谜
  • 我已将其发布在用户邮件列表中。我得看看我是否得到任何回应。如果没有,我会把它发布到开发者列表中。

标签: ivy


【解决方案1】:

这是我发现的:

  • &lt;ivy:settings&gt; 是较新的首选方式。
  • &lt;ivy:configure&gt; 可能会或可能不会被弃用。
  • &lt;ivy:settings&gt; 在调用 &lt;ivy:resolve&gt; 之前不会设置我的 Ivy 设置,而 &lt;ivy:configure&gt; 在任务执行后立即设置所有 Ivy 设置。

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

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

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 2018-07-07
    • 2023-04-03
    • 2010-12-30
    • 2013-05-31
    • 2016-08-17
    • 2011-02-24
    • 2012-09-11
    • 2017-08-30
    相关资源
    最近更新 更多