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

Reply via email to