diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java index 347611811..97c357d67 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java @@ -593,7 +593,8 @@ public class Javadoc extends Task { log("Generating Javadoc", Project.MSG_INFO); - cmd.setExecutable("javadoc"); + Commandline toExecute = (Commandline)cmd.clone(); + toExecute.setExecutable("javadoc"); // ------------------------------------------------ general javadoc arguments if (classpath == null) @@ -603,20 +604,20 @@ public class Javadoc extends Task { addReferencesToPath(sourcepathReferences, sourcePath); if (!javadoc1) { - cmd.createArgument().setValue("-classpath"); - cmd.createArgument().setPath(classpath); - cmd.createArgument().setValue("-sourcepath"); - cmd.createArgument().setPath(sourcePath); + toExecute.createArgument().setValue("-classpath"); + toExecute.createArgument().setPath(classpath); + toExecute.createArgument().setValue("-sourcepath"); + toExecute.createArgument().setPath(sourcePath); } else { - cmd.createArgument().setValue("-classpath"); - cmd.createArgument().setValue(sourcePath.toString() + + toExecute.createArgument().setValue("-classpath"); + toExecute.createArgument().setValue(sourcePath.toString() + System.getProperty("path.separator") + classpath.toString()); } if (version && doclet == null) - cmd.createArgument().setValue("-version"); + toExecute.createArgument().setValue("-version"); if (author && doclet == null) - cmd.createArgument().setValue("-author"); + toExecute.createArgument().setValue("-author"); // --------------------------------- javadoc2 arguments for default doclet @@ -628,11 +629,11 @@ public class Javadoc extends Task { throw new BuildException("The doclet name must be specified.", location); } else { - cmd.createArgument().setValue("-doclet"); - cmd.createArgument().setValue(doclet.getName()); + toExecute.createArgument().setValue("-doclet"); + toExecute.createArgument().setValue(doclet.getName()); if (doclet.getPath() != null) { - cmd.createArgument().setValue("-docletpath"); - cmd.createArgument().setPath(doclet.getPath()); + toExecute.createArgument().setValue("-docletpath"); + toExecute.createArgument().setPath(doclet.getPath()); } for (Enumeration e = doclet.getParams(); e.hasMoreElements();) { DocletParam param = (DocletParam)e.nextElement(); @@ -640,9 +641,9 @@ public class Javadoc extends Task { throw new BuildException("Doclet parameters must have a name"); } - cmd.createArgument().setValue(param.getName()); + toExecute.createArgument().setValue(param.getName()); if (param.getValue() != null) { - cmd.createArgument().setValue(param.getValue()); + toExecute.createArgument().setValue(param.getValue()); } } } @@ -650,8 +651,8 @@ public class Javadoc extends Task { if (bootclasspath != null || bootClasspathReferences.size() > 0) { addReferencesToPath(bootClasspathReferences, createBootclasspath()); - cmd.createArgument().setValue("-bootclasspath"); - cmd.createArgument().setPath(bootclasspath); + toExecute.createArgument().setValue("-bootclasspath"); + toExecute.createArgument().setPath(bootclasspath); } // add the links arguments @@ -669,13 +670,13 @@ public class Javadoc extends Task { throw new BuildException("The package list location for link " + la.getHref() + " must be provided because the link is offline"); } - cmd.createArgument().setValue("-linkoffline"); - cmd.createArgument().setValue(la.getHref()); - cmd.createArgument().setValue(packageListLocation); + toExecute.createArgument().setValue("-linkoffline"); + toExecute.createArgument().setValue(la.getHref()); + toExecute.createArgument().setValue(packageListLocation); } else { - cmd.createArgument().setValue("-link"); - cmd.createArgument().setValue(la.getHref()); + toExecute.createArgument().setValue("-link"); + toExecute.createArgument().setValue(la.getHref()); } } } @@ -699,9 +700,9 @@ public class Javadoc extends Task { if (space > 0){ String name = grp.substring(0, space); String pkgList = grp.substring(space + 1); - cmd.createArgument().setValue("-group"); - cmd.createArgument().setValue(name); - cmd.createArgument().setValue(pkgList); + toExecute.createArgument().setValue("-group"); + toExecute.createArgument().setValue(name); + toExecute.createArgument().setValue(pkgList); } } } @@ -715,9 +716,9 @@ public class Javadoc extends Task { if (title == null || packages == null) { throw new BuildException("The title and packages must be specified for group elements."); } - cmd.createArgument().setValue("-group"); - cmd.createArgument().setValue(title); - cmd.createArgument().setValue(packages); + toExecute.createArgument().setValue("-group"); + toExecute.createArgument().setValue(title); + toExecute.createArgument().setValue(packages); } } @@ -731,25 +732,25 @@ public class Javadoc extends Task { if (name.endsWith(".*")) { packages.addElement(name); } else { - cmd.createArgument().setValue(name); + toExecute.createArgument().setValue(name); } } if (packages.size() > 0) { - evaluatePackages(sourcePath, packages); + evaluatePackages(toExecute, sourcePath, packages); } } if ((sourceFiles != null) && (sourceFiles.length() > 0)) { StringTokenizer tok = new StringTokenizer(sourceFiles, ",", false); while (tok.hasMoreTokens()) { - cmd.createArgument().setValue(tok.nextToken().trim()); + toExecute.createArgument().setValue(tok.nextToken().trim()); } } if (packageList != null) { - cmd.createArgument().setValue("@" + packageList); + toExecute.createArgument().setValue("@" + packageList); } - log("Javadoc args: " + cmd, Project.MSG_VERBOSE); + log("Javadoc args: " + toExecute, Project.MSG_VERBOSE); log("Javadoc execution", Project.MSG_INFO); @@ -759,7 +760,7 @@ public class Javadoc extends Task { exe.setAntRun(project); exe.setWorkingDirectory(project.getBaseDir()); try { - exe.setCommandline(cmd.getCommandline()); + exe.setCommandline(toExecute.getCommandline()); exe.execute(); } catch (IOException e) { throw new BuildException("Javadoc failed: " + e, e, location); @@ -797,7 +798,8 @@ public class Javadoc extends Task { * with the packages found in that path subdirs matching one of the given * patterns. */ - private void evaluatePackages(Path sourcePath, Vector packages) { + private void evaluatePackages(Commandline toExecute, Path sourcePath, + Vector packages) { log("Source path = " + sourcePath.toString(), Project.MSG_VERBOSE); log("Packages = " + packages, Project.MSG_VERBOSE); @@ -813,7 +815,7 @@ public class Javadoc extends Task { for (int i = 0; i < packages.size(); i++) { if (matches(pack, (String) packages.elementAt(i))) { if (!addedPackages.contains(pack)) { - cmd.createArgument().setValue(pack); + toExecute.createArgument().setValue(pack); addedPackages.addElement(pack); } break; diff --git a/src/main/org/apache/tools/ant/taskdefs/Patch.java b/src/main/org/apache/tools/ant/taskdefs/Patch.java index 0a5223c78..9b920cb84 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Patch.java +++ b/src/main/org/apache/tools/ant/taskdefs/Patch.java @@ -145,16 +145,17 @@ public class Patch extends Task { location); } - cmd.setExecutable("patch"); + Commandline toExecute = (Commandline)cmd.clone(); + toExecute.setExecutable("patch"); if (originalFile != null) { - cmd.createArgument().setFile(originalFile); + toExecute.createArgument().setFile(originalFile); } Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN), null); - exe.setCommandline(cmd.getCommandline()); + exe.setCommandline(toExecute.getCommandline()); try { exe.execute(); } catch (IOException e) { diff --git a/src/main/org/apache/tools/ant/types/Commandline.java b/src/main/org/apache/tools/ant/types/Commandline.java index 753aec0c6..0996b33f1 100644 --- a/src/main/org/apache/tools/ant/types/Commandline.java +++ b/src/main/org/apache/tools/ant/types/Commandline.java @@ -327,4 +327,12 @@ public class Commandline implements Cloneable { return c; } + /** + * Clear out the whole command line. + */ + public void clear() { + executable = null; + arguments.removeAllElements(); + } + }