diff --git a/src/java/org/apache/ivy/core/resolve/IvyNode.java b/src/java/org/apache/ivy/core/resolve/IvyNode.java index b3da8c16..273488ef 100644 --- a/src/java/org/apache/ivy/core/resolve/IvyNode.java +++ b/src/java/org/apache/ivy/core/resolve/IvyNode.java @@ -165,7 +165,13 @@ public class IvyNode implements Comparable { } else { markRootModuleConfLoaded(rootModuleConf); if (md == null) { - DependencyResolver resolver = data.getSettings().getResolver(getId()); + ResolveEngine engine = IvyContext.getContext().getIvy().getResolveEngine(); + // get the resolver configured on the engine and if none is configured then + // get the one configured in ivy settings + DependencyResolver resolver = engine.getDictatorResolver(); + if (resolver == null) { + resolver = data.getSettings().getResolver(getId()); + } if (resolver == null) { Message.error("no resolver found for " + getModuleId() + ": check your configuration"); diff --git a/src/java/org/apache/ivy/core/resolve/ResolveEngine.java b/src/java/org/apache/ivy/core/resolve/ResolveEngine.java index eb12618d..7333e32e 100644 --- a/src/java/org/apache/ivy/core/resolve/ResolveEngine.java +++ b/src/java/org/apache/ivy/core/resolve/ResolveEngine.java @@ -126,7 +126,6 @@ public class ResolveEngine { */ public void setDictatorResolver(DependencyResolver dictatorResolver) { this.dictatorResolver = dictatorResolver; - settings.setDictatorResolver(dictatorResolver); } public ResolveReport resolve(File ivySource) throws ParseException, IOException { diff --git a/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java b/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java index 8fe52751..243e4112 100644 --- a/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java +++ b/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java @@ -28,9 +28,11 @@ import org.apache.ivy.core.module.id.ModuleRevisionId; import org.apache.ivy.core.report.ArtifactDownloadReport; import org.apache.ivy.core.report.DownloadStatus; import org.apache.ivy.core.report.ResolveReport; +import org.apache.ivy.plugins.resolver.FileSystemResolver; import org.apache.ivy.util.CacheCleaner; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -87,6 +89,34 @@ public class ResolveEngineTest { "jar", "jar"), new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar")); } + /** + * Tests that setting the dictator resolver on the resolve engine doesn't change the + * dependency resolver set in the Ivy settings. See IVY-1618 for details. + */ + @Test + public void testSetDictatorResolver() throws Exception { + final Ivy current = Ivy.newInstance(); + current.configure(new File("test/repositories/ivysettings.xml")); + final FileSystemResolver settingsResolver = new FileSystemResolver(); + settingsResolver.setName("resolver-1"); + current.getSettings().setDictatorResolver(settingsResolver); + + final ResolveEngine engine = new ResolveEngine(current.getSettings(), current.getEventManager(), + current.getSortEngine()); + final FileSystemResolver engineResolver = new FileSystemResolver(); + engineResolver.setName("resolver-2"); + engine.setDictatorResolver(engineResolver); + + Assert.assertNotNull("Resolver is null on engine", engine.getDictatorResolver()); + Assert.assertSame("Unexpected resolver on engine", engineResolver, engine.getDictatorResolver()); + + final ModuleRevisionId dummy = ModuleRevisionId.newInstance("foo", "bar", "1.2.3"); + Assert.assertNotNull("Resolver is null on Ivy settings", current.getSettings().getResolver(dummy)); + Assert.assertSame("Unexpected resolver on Ivy settings", settingsResolver, + current.getSettings().getResolver(dummy)); + + } + private void testLocateThenDownload(ResolveEngine engine, Artifact artifact, File artifactFile) { ArtifactOrigin origin = engine.locate(artifact); assertNotNull(origin);