【发布时间】:2012-11-16 14:29:38
【问题描述】:
我有一个主 Ivy 项目,其他人通过 svn:externals 属性将其包含在他们的项目中。该项目包含 Ivy jar,连接到我们项目的默认 ivysettings.xml 文件,以及一些允许我标准化构建 jar 的方式的 Ant 宏等(例如,用户使用 <jar.macro> 与 @987654323 @.<jar.macro> 使用相同的参数,但也会自动将 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>
我最初使用<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> 是否已弃用?
【问题讨论】:
-
很好的问题。我从未使用过“配置”任务。我怀疑设置任务更有用,因为它可以让您使用多个常春藤设置文件执行多个常春藤解析任务。由于我很少多次调用常春藤解析,因此在我的案例中,任务之间似乎没有真正的功能差异:-)
-
除了
<ivy:configure>和<ivy:settings>都可以采用设置ID,所以它们似乎都可以使用多个设置和多个解析。它在<ivy:settings>文档中明确提到了这一点,但似乎这两个任务都支持此功能。我相信<ivy:settings>是 Ivy 2.x 中使用的默认值,但在我的情况下,我的<ivy:cleancache>导致<ivy:settings>出现问题,但<ivy:configure>没有出现问题。 -
也许这个问题最好发布到开发者邮件列表中。就像我说的那样,我很少在构建中多次执行常春藤解析。这就解释了为什么我从不需要指定设置 ID。是的,这有点谜
-
我已将其发布在用户邮件列表中。我得看看我是否得到任何回应。如果没有,我会把它发布到开发者列表中。
标签: ivy