Index: test/java/org/apache/ivy/plugins/resolver/PackagerResolverTest.java =================================================================== --- test/java/org/apache/ivy/plugins/resolver/PackagerResolverTest.java (revision 676039) +++ test/java/org/apache/ivy/plugins/resolver/PackagerResolverTest.java (working copy) @@ -110,6 +110,7 @@ resolver.setBuildRoot(_builddir.getAbsolutePath()); resolver.setResourceCache(_cachedir.getAbsolutePath()); resolver.setPreserveBuildDirectories(true); + resolver.setVerbose(true); resolver.setName("packager"); assertEquals("packager", resolver.getName()); Index: src/java/org/apache/ivy/plugins/resolver/packager/PackagerCacheEntry.java =================================================================== --- src/java/org/apache/ivy/plugins/resolver/packager/PackagerCacheEntry.java (revision 676039) +++ src/java/org/apache/ivy/plugins/resolver/packager/PackagerCacheEntry.java (working copy) @@ -25,11 +25,20 @@ import java.io.OutputStream; import java.util.ArrayList; +import org.apache.ivy.ant.IvyTask; +import org.apache.ivy.core.IvyContext; import org.apache.ivy.core.IvyPatternHelper; import org.apache.ivy.core.module.descriptor.Artifact; import org.apache.ivy.core.module.id.ModuleRevisionId; import org.apache.ivy.plugins.resolver.util.ResolvedResource; import org.apache.ivy.util.FileUtil; +import org.apache.ivy.util.Message; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.BuildLogger; +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.Ant; +import org.apache.tools.ant.taskdefs.Property; /** * Represents one entry in the cache of a {@link PackagerResolver}. @@ -100,42 +109,54 @@ // Write master ant build file saveFile("build.xml"); - // Create new process argument list - ArrayList paramList = new ArrayList(); - paramList.add("ant"); - if (this.verbose) { - paramList.add("-verbose"); + // Create ant sub-task + Ant ant = new Ant(); + Project project = (Project) IvyContext.peekInContextStack(IvyTask.ANT_PROJECT_CONTEXT_KEY); + if (project == null) { + project = new Project(); + project.init(); + project.setName("packager"); } - if (this.quiet) { - paramList.add("-quiet"); - } - paramList.add("-Divy.packager.organisation=" + this.mr.getModuleId().getOrganisation()); - paramList.add("-Divy.packager.module=" + this.mr.getModuleId().getName()); - paramList.add("-Divy.packager.revision=" + this.mr.getRevision()); - paramList.add("-Divy.packager.branch=" + this.mr.getBranch()); + ant.setProject(project); + ant.setTaskName("packager"); + ant.setDir(this.dir); + ant.setInheritAll(false); + ant.setInheritRefs(false); + ant.setTarget("build"); + + // Configure logging verbosity + BuildLogger logger = new DefaultLogger(); + logger.setMessageOutputLevel(this.verbose ? Project.MSG_VERBOSE : + this.quiet ? Project.MSG_WARN : Project.MSG_INFO); + logger.setOutputPrintStream(System.out); + logger.setErrorPrintStream(System.err); + project.addBuildListener(logger); + + // Set properties + setProperty(ant, "ivy.packager.organisation", "" + this.mr.getModuleId().getOrganisation()); + setProperty(ant, "ivy.packager.module", "" + this.mr.getModuleId().getName()); + setProperty(ant, "ivy.packager.revision", "" + this.mr.getRevision()); + setProperty(ant, "ivy.packager.branch", "" + this.mr.getBranch()); if (this.resourceCache != null) { - paramList.add("-Divy.packager.resourceCache=" + this.resourceCache.getCanonicalPath()); + setProperty(ant, "ivy.packager.resourceCache", "" + this.resourceCache.getCanonicalPath()); } if (this.resourceURL != null) { - paramList.add("-Divy.packager.resourceURL=" + getResourceURL()); + setProperty(ant, "ivy.packager.resourceURL", "" + getResourceURL()); } if (this.validate) { - paramList.add("-Divy.packager.validate=true"); + setProperty(ant, "ivy.packager.validate", "true"); } - String[] params = (String[]) paramList.toArray(new String[paramList.size()]); - // Run ant - SubProcess proc = new SubProcess(params, null, this.dir); - int result; + // Execute task + Message.verbose("performing packager resolver build in " + this.dir); try { - result = proc.run(); - } catch (InterruptedException e) { - throw new RuntimeException(e); + ant.execute(); + this.built = true; + } catch (BuildException e) { +e.printStackTrace(System.out); + Message.verbose("packager resolver build failed: " + e); + throw e; } - if (result != 0) { - throw new IOException("build in directory `" + this.dir + "' failed"); - } - this.built = true; } /** @@ -192,6 +213,13 @@ } } + private Property setProperty(Ant ant, String name, String value) { + Property p = ant.createProperty(); + p.setName(name); + p.setValue(value); + return p; + } + private String getResourceURL() { String baseURL = IvyPatternHelper.substitute(this.resourceURL, this.mr.getOrganisation(), this.mr.getName(), this.mr.getRevision(), null, null, null, null,