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