When is it better to use <ivy:settings> vs. <ivy:configure>?

I ask because I was having a problem with my Ivy setup. We use Subversion
and have multiple projects setup that use Ant. In order to centralize our
jar dependencies, I've decided to implement Ivy into our process.

I did this by creating an Ivy project (https://github.com/qazwart/ivy.dir)
in Subversion. Users merely set `svn:externals` to include this project,
make some minor changes in their build.xml, and add in a "ivy.xml" file,
and everything is set. I control the ivysettings.xml file, so I point Ivy
to our repository. The Ivy jar is part of the Ivy project, so users don't
have to install it. The idea was to make Ivy integration as painless as
possible.

We use Jenkins as our build system, and I decided it would be good if we
could clean the Ivy cache before each build. However, out Jenkins system
has six executors, so as many as six builds could happen at once. Cleaning
the cache in one build while another one runs could cause problems, so I
modified my ivysettings.xml file to use a different cache depending upon
the 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>

The problem is that if I did an <ivy:cleancache>, the cache ID was always
set to "cache-0". When I switched from "<ivy:settings>" to
"<ivy:configure>", the problem went away. (In the standard build process,
the <ivy:cleancache> task is executed before the <ivy:resolve> task).

I'm told that "<ivy:settings>" can do multiple configurations, but it looks
like <ivy:configure> also can do multiple settings too. I also read that
"<ivy:configure>" was deprecated in some mailings, but it doesn't state
that in the on line documentation.

So what is the difference between <ivy:settings> and <ivy:configure>, and
when should I use one over the other?

-- 
David Weintraub
qazw...@gmail.com

Reply via email to