我有一个主常春藤项目,其他人通过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>
弃用了吗?