我有一个常春藤大师项目,其他人通过svn:externals
属性包含在他们的项目中。该项目包含Ivy jar,连接到我们项目的默认ivysettings.xml文件,以及一些Ant宏,它允许我标准化我们构建jar的方式等。(例如,用户使用<jar.macro>
vs. <jar>
。<jar.macro>
使用相同的参数,但也会自动将pom.xml
嵌入到jar中,并将Jenkins构建信息添加到Manifest中。
我们还使用Jenkins作为我们的持续集成系统。我想做的其中一件事是清理每个构建的常春藤缓存,因此我们没有因缓存问题而导致任何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:settings>
切换到<ivy:configure>
,问题就消失了。显然,<ivy:configure>
会立即设置Ivy(从而正确设置缓存),而<ivy:settings>
在<ivy:resolve>
被调用之前不会设置Ivy。
我在Nabble上看过一些关于<ivy:configure>
被弃用(或许不是)的电子邮件。我在常春藤在线文档中没有看到任何内容,说明<ivy:configure>
已被弃用。
那么,您何时会使用<ivy:settings>
与<ivy:configure>
。在我的情况下,由于我需要为每个Jenkins执行程序提供单独的缓存,我需要使用<ivy:configure>
,但是有理由我可以<ivy:settings>
使用<ivy:configure>
吗?并且<ivy:configure>
已被弃用?
答案 0 :(得分:4)
这是我发现的:
<ivy:settings>
较新且首选方式。<ivy:configure>
可能已弃用,也可能未被弃用。 <ivy:settings>
在调用<ivy:resolve>
之前未设置常春藤设置,而<ivy:configure>
会在执行任务后立即设置所有常春藤设置。最后一个是我的问题。由于我有并行的Jenkins构建,我想用完全干净的缓存开始每个构建,我使用自定义缓存设置,具体取决于Jenkins执行器编号。缓存标记为cache-0
到cache-5
。
但是,由于在我致电<ivy:settings>
之前未执行<ivy:resolve>
,因此我的自定义缓存设置未被提取。在我调用Ivy resolve之前调用<ivy:cleancache>
会导致构建清除公共缓存。随之而来的是欢闹。使用<ivy:cofnfigure>
修复了此问题。