Hi,
I'm trying to improve the resolve performance of Gradle's usage of Ivy.
As a test I have an ivy module with three configurations (testRuntime
extends testCompile extends compile).
As a comparison I use the following ant script:
<?xml version="1.0"?>
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="sample"
default="resolve1">
<target name="resolve1">
<ivy:resolve conf="compile" haltonfailure="false"/>
</target>
<target name="resolve11" depends="resolve1">
<ivy:resolve conf="compile" haltonfailure="false"/>
</target>
<target name="resolve2" depends="resolve1">
<ivy:resolve conf="testCompile" haltonfailure="false"/>
</target>
<target name="resolve3" depends="resolve2">
<ivy:resolve conf="testRuntime" haltonfailure="false"/>
</target>
<target name="resolve4">
<ivy:resolve conf="compile,testCompile,testRuntime"
haltonfailure="false"/>
</target>
</project>
The Ant resolve seems to be smart in that it remembers earlier
resolves. For example when executing resolve11 the second resolve is
much faster than the first resolve. This is also true for resolves of
extending configuration (e.g. resolve2 and resolve3).
The difference between resolve3 and the aggregate resolve4 is only 200
ms in my example (1800ms vs 1600ms).
With Gradle the resolve performance of successive resolves seems not
to benefit from earlier resolves. Unfortunately I was not successful
yet to improve this behaviour. We use the same Ivy instance for
successive resolves.
Where in Ivy does the optimization takes place? What can I do to
switch this on?
Any help is very much appreciated
- Hans
--
Hans Dockter
Gradle Project Manager
http://www.gradle.org