IVY-1618 Don't change the dependency resolver configure on Ivy settings when setting the one on ResolveEngine

This commit is contained in:
Jaikiran Pai 2021-03-29 09:33:15 +05:30
parent a4ab62a717
commit 370e52b74a
3 changed files with 37 additions and 2 deletions

View File

@ -165,7 +165,13 @@ public class IvyNode implements Comparable<IvyNode> {
} 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");

View File

@ -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 {

View File

@ -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);