diff --git a/src/main/org/apache/tools/ant/types/Commandline.java b/src/main/org/apache/tools/ant/types/Commandline.java index c273d7aa8..a417a0c77 100644 --- a/src/main/org/apache/tools/ant/types/Commandline.java +++ b/src/main/org/apache/tools/ant/types/Commandline.java @@ -318,11 +318,25 @@ public class Commandline implements Cloneable { * @param executable the String executable name. */ public void setExecutable(String executable) { + setExecutable(executable, true); + } + + /** + * Set the executable to run. + * + * @param executable the String executable name. + * @param translateFileSeparator if {@code true} all file separators in the string + * are converted to the platform specific value. + * + * @since Ant 1.9.7 + */ + public void setExecutable(String executable, boolean translateFileSeparator) { if (executable == null || executable.length() == 0) { return; } - this.executable = executable.replace('/', File.separatorChar) - .replace('\\', File.separatorChar); + this.executable = translateFileSeparator + ? executable.replace('/', File.separatorChar).replace('\\', File.separatorChar) + : executable; } /** diff --git a/src/main/org/apache/tools/ant/types/CommandlineJava.java b/src/main/org/apache/tools/ant/types/CommandlineJava.java index c7cc1195f..5bf91c71f 100644 --- a/src/main/org/apache/tools/ant/types/CommandlineJava.java +++ b/src/main/org/apache/tools/ant/types/CommandlineJava.java @@ -347,7 +347,7 @@ public class CommandlineJava implements Cloneable { if (executableType == ExecutableType.MODULE) { javaCommand.setExecutable(createModuleClassPair( parseModuleFromModuleClassPair(javaCommand.getExecutable()), - classname)); + classname), false); } else { javaCommand.setExecutable(classname); executableType = ExecutableType.CLASS; @@ -382,17 +382,18 @@ public class CommandlineJava implements Cloneable { } else { switch (executableType) { case JAR: - javaCommand.setExecutable(module); + javaCommand.setExecutable(module, false); break; case CLASS: javaCommand.setExecutable(createModuleClassPair( module, - javaCommand.getExecutable())); + javaCommand.getExecutable()), false); break; case MODULE: javaCommand.setExecutable(createModuleClassPair( module, - parseClassFromModuleClassPair(javaCommand.getExecutable()))); + parseClassFromModuleClassPair(javaCommand.getExecutable())), + false); break; } } @@ -543,7 +544,8 @@ public class CommandlineJava implements Cloneable { listIterator.add("-m"); } // this is the classname to run as well as its arguments. - // in case of 'executeJar', the executable is a jar file. + // in case of ExecutableType.JAR, the executable is a jar file, + // in case of ExecutableType.MODULE, the executable is a module name, portentially including a class name. javaCommand.addCommandToList(listIterator); }