How can I get Ivy to resolve dependencies (including dependencies with `changing="true"`) from the local cache when offline/disconnected?

I'm working on a Java-based open-source project that uses Apache Ivy to resolve and download 3rd party dependencies. The project's `build.xml` has an ant target named `resolve` that downloads Ivy (if needed) and then uses Ivy to retrieve the required jars.

Everything works great when online. However, without Internet access, `ant resolve` fails even if the required jars are in the local Ivy cache (`~/.ivy2/cache`) and `ivy.cache.ttl.default=eternal`. It appears that Ivy is trying to connect to the Maven repository to refresh `changing="true"` dependencies.

The error I get is similar to the following:

[ivy:retrieve] You probably access the destination server through a proxy server that is not well configured. [ivy:retrieve] You probably access the destination server through a proxy server that is not well configured.
    [ivy:retrieve]
    [ivy:retrieve] :: problems summary ::
    [ivy:retrieve] :::: WARNINGS
[ivy:retrieve] Host repo.example.com not found. url=http://repo.example.com/exampleorg/examplename/examplerev/ivys/ivy.xml [ivy:retrieve] Host repo.example.com not found. url=http://repo.example.com/exampleorg/examplename/examplerev/jars/examplename.jar [ivy:retrieve] module not found: exampleorg#examplename;examplerev
    [ivy:retrieve]  ==== local: tried
[ivy:retrieve] ~/.ivy2/local/exampleorg/examplename/examplerev/ivys/ivy.xml [ivy:retrieve] -- artifact exampleorg#examplename;examplerev!examplename.jar: [ivy:retrieve] ~/.ivy2/local/exampleorg/examplename/examplerev/jars/examplename.jar
    [ivy:retrieve]  ==== shared: tried
[ivy:retrieve] ~/.ivy2/shared/exampleorg/examplename/examplerev/ivys/ivy.xml [ivy:retrieve] -- artifact exampleorg#examplename;examplerev!examplename.jar: [ivy:retrieve] ~/.ivy2/shared/exampleorg/examplename/examplerev/jars/examplename.jar
    [ivy:retrieve]  ==== repo: tried
[ivy:retrieve] http://repo.example.com/exampleorg/examplename/examplerev/ivys/ivy.xml [ivy:retrieve] -- artifact exampleorg#examplename;examplerev!examplename.jar: [ivy:retrieve] http://repo.example.com/exampleorg/examplename/examplerev/jars/examplename.jar
    [ivy:retrieve]          ::::::::::::::::::::::::::::::::::::::::::::::
    [ivy:retrieve]          ::          UNRESOLVED DEPENDENCIES         ::
    [ivy:retrieve]          ::::::::::::::::::::::::::::::::::::::::::::::
    [ivy:retrieve]          :: exampleorg#examplename;examplerev: not found
    [ivy:retrieve]          ::::::::::::::::::::::::::::::::::::::::::::::
    [ivy:retrieve]
    [ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

    BUILD FAILED
    ~/exampleproj/build.xml:123: impossible to resolve dependencies:
            resolve failed - see output for details

Running `ant -verbose resolve` as suggested by the warning prints the following line in the output:

[ivy:retrieve] don't use cache for exampleorg#examplename;examplerev: changing=true

How can I get Ivy to resolve `changing="true"` dependencies from the cache when offline, but continue to query the repository each build when online?

Thanks,
Richard

Reply via email to