我有一个常春藤大师项目,其他人通过svn:externals属性将其包含在他们的项目中。该项目包含Ivy jar,这是连接到我们的项目的默认ivysettings.xml文件,以及一些Ant宏,它们允许我标准化构建jar的方式,等等(例如,用户使用<jar.macro>与<jar>。<jar.macro>使用相同的参数,但也会自动将pom.xml嵌入到jar中,并将Jenkins构建信息添加到清单中)。
我们还使用Jenkins作为我们的持续集成系统。我想做的一件事是清理每个构建的Ivy缓存,这样我们就不会因为缓存问题而出现任何jar问题。为此,我设置了我的ivysettings.xml文件,为每个Jenkins Executor定义一个单独的缓存:
<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 executors都使用相同的Ivy缓存,这导致了问题。我从<ivy:settings>切换到<ivy:configure>,这个问题就消失了。显然,<ivy:configure>立即设置了Ivy (因此正确地设置了缓存),而<ivy:settings>直到调用<ivy:resolve>才设置Ivy。
我在Nabble上看到了一些关于<ivy:configure>被弃用的电子邮件(也许没有)。我在Ivy online文档中看不到任何关于<ivy:configure>被弃用的内容。
那么,什么时候你会使用<ivy:settings>而不是<ivy:configure>。在我的例子中,因为我需要为每个Jenkins executor单独缓存,所以我需要使用<ivy:configure>,但是我使用<ivy:settings>而不是<ivy:configure>有什么原因吗?而且,<ivy:configure>是否已被弃用?
发布于 2013-01-18 07:34:15
这是我发现的:
<ivy:settings>较新,首选的way.<ivy:configure>可能会被弃用,也可能不会被弃用。在调用<ivy:resolve>之前,<ivy:settings>不会设置我的常春藤设置,而<ivy:configure>在任务执行后立即设置所有常春藤设置。最后一个是我的问题。由于我正在进行并行Jenkins构建,并且我希望每个构建开始时都有一个完全干净的缓存,因此我根据Jenkins executor编号使用定制的缓存设置。缓存标记为cache-0到cache-5。
但是,由于在我调用<ivy:resolve>之前不会执行<ivy:settings>,所以我的自定义缓存设置不会被获取。我在调用Ivy resolve之前调用了<ivy:cleancache>,这会导致构建清理一个公共缓存。随之而来的是搞笑。使用<ivy:cofnfigure>解决了这个问题。
https://stackoverflow.com/questions/13610151
复制相似问题