My module A depends on modules B and C, which both depend on different versions of module D. My Ivy dependencies look like this:
<ivy-module>
<info organisation="com.a" module="A"/>
<configurations defaultconf="runtime">
<conf name="runtime"/>
</configurations>
<dependencies>
<dependency org="org.b" name="B" rev="2.0" conf="runtime->default" />
<dependency org="org.c" name="C" rev="2.4" conf="runtime->default" />
<conflict org="org.d" module="D" rev="2.4"/>
</dependencies>
</ivy-module>
I'm using a strict conflict resolution manager and it is correctly pointing out a conflict:
[ivy:retrieve] :: Apache Ivy 2.3.0-rc2 - 20121105223351 :: http://ant.apache.org/ivy/ ::
...
...
[ivy:retrieve] :::: ERRORS
[ivy:retrieve] org.d#D;2.3 (needed by [org.c#C;2.4]) conflicts with org.d#D;2.4 (needed by [org.b#B;2.0])
Why doesn't the conflict tag tell Ivy to use version 2.4 of module D? I would like to use strict conflict resolution and then override conflicts one at a time so that it is clear where we are taking the risk of not using the version of a dependency that's mentioned in another project's pom/ivy. Adding an exclude of org.d to the org.c dependency removes the conflict, but it seems to me like using the conflict tag is more clear to future readers of the file.