我有一个主要的Ivy项目,他人通过
我们还使用Jenkins作为我们的持续集成系统之一。我想做的事情之一是在每次构建时清除Ivy缓存,这样我们就不会因为缓存问题而遇到任何jar问题。为此,我已经设置了我的
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>
是否已被弃用?
<ivy:configure>
和<ivy:settings>
都可以使用 _settings ID_,因此它们似乎都能够使用多个设置和多个解析。在<ivy:settings>
文档中明确提到了这一点,但是似乎两个任务都支持此功能。我相信<ivy:settings>
是在 Ivy 2.x 中默认使用的,但在我的情况下,我的<ivy:cleancache>
导致了与<ivy:settings>
不同的问题,但没有与<ivy:configure>
发生问题。 - David W.