*sigh* As it turns out, I was a little premature with my description of Ivy's resolution.
Ivy, unlike Maven, by default does not pass the revision constraint down the graph - all it passes is the result. So while it is good at resolving a determined conflict, it doesn't prevent future clashes. (Gradle, by contrast, doesn't pass down the result yet at all) So the solution for both Ivy and Gradle would be to use custom conflict managers. Now, at this stage, there is no support for customer conflict managers in Gradle, from what I can see - is that correct? Robert. On 13/12/2011, at 3:19 PM, Robert Watkins wrote: > On 13/12/2011, at 8:19 AM, Daz DeBoer wrote: > >> On 12 December 2011 14:26, Robert Watkins <[email protected]> wrote: >> This isn't just a Maven feature - Ivy has the same functionality with a >> different syntax - >> http://ant.apache.org/ivy/history/trunk/settings/version-matchers.html It >> just so happens that for this particular area, the syntax is the same. >> >> Well as far as I know, ivy doesn't support the concept of "hard" version >> requirements. So ivy might support the [1.0] syntax, but I don't think it >> will behave the way maven does. (I'm not certain, because in Ivy the >> responsibility for ejecting versions is smeared between the >> DependencyResolver implementations and the Ivy ResolveEngine. So it may >> depend on the DependencyResolvers you have configured.) >> > Okay, after a bit of investigation, this is what I've found: the version > matchers are only 'hard' if they are also forced. So in this respect, Ivy and > Gradle are similar. (Gradle also will correctly use Ivy-style version > matchers, both forced and not-forced) > > The big difference is that Ivy respects the forced dependency transitively. > Gradle doesn't, at least not at this time. > > To implement this, Gradle will need to: > * Add the forced="true" attribute to the appropriate dependency in the > generated ivy.xml > * Respect said forced="true" attribute in the ivy.xml for dependent projects. > > And, when reading/generating Maven, treat forced dependencies as 'hard'. > > I've updated my test cases again, this time including ivy vs gradle, showing > the differences - output at > http://dl.dropbox.com/u/46203904/result_for_ivy_forced_dependencies.html, > with a tarball of the test case at > http://dl.dropbox.com/u/46203904/ivy_forced_dependency_in_nested_diamond_structure_resolves_between_peers.tgz > >
