diff --git a/src/main/java/org/codehaus/plexus/util/cli/Commandline.java b/src/main/java/org/codehaus/plexus/util/cli/Commandline.java
index db145c50..4bac3f1b 100644
--- a/src/main/java/org/codehaus/plexus/util/cli/Commandline.java
+++ b/src/main/java/org/codehaus/plexus/util/cli/Commandline.java
@@ -428,19 +428,18 @@ public String[] getEnvironmentVariables() throws CommandLineException {
}
/**
+ * Warning: For built-in commands like 'echo' on {@link Os#FAMILY_WINDOWS}, use cmd /X /C echo
+ * @deprecated Use {@link org.codehaus.plexus.util.cli.Commandline#getRawCommandline()} method instead.
* @return Returns the executable and all defined arguments.
- * For Windows Family, {@link Commandline#getShellCommandline()} is returned
*/
+ @Deprecated
public String[] getCommandline() {
- if (Os.isFamily(Os.FAMILY_WINDOWS)) {
- return getShellCommandline();
- }
-
return getRawCommandline();
}
/**
- * Returns the executable and all defined arguments.
+ * Returns the executable and all defined arguments.
+ * Warning: For built-in commands like 'echo' on {@link Os#FAMILY_WINDOWS}, use cmd /X /C echo
* @return the command line as array not escaped neither quoted
*/
public String[] getRawCommandline() {
@@ -494,7 +493,7 @@ public String toString() {
}
public int size() {
- return getCommandline().length;
+ return getRawCommandline().length;
}
@Override
@@ -582,7 +581,7 @@ public Process execute() throws CommandLineException {
try {
if (workingDir == null) {
- process = Runtime.getRuntime().exec(getCommandline(), environment, workingDir);
+ process = Runtime.getRuntime().exec(getRawCommandline(), environment, workingDir);
} else {
if (!workingDir.exists()) {
throw new CommandLineException(
diff --git a/src/test/java/org/codehaus/plexus/util/cli/CommandlineTest.java b/src/test/java/org/codehaus/plexus/util/cli/CommandlineTest.java
index 95862478..46a14a3a 100644
--- a/src/test/java/org/codehaus/plexus/util/cli/CommandlineTest.java
+++ b/src/test/java/org/codehaus/plexus/util/cli/CommandlineTest.java
@@ -78,10 +78,14 @@ void commandlineWithCommandInConstructor() {
@Test
void executeBinaryOnPath() throws Exception {
// Maven startup script on PATH is required for this test
+ String binary = "mvn";
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
+ binary += ".cmd";
+ }
Commandline cmd = new Commandline();
cmd.setWorkingDirectory(baseDir);
- cmd.setExecutable("mvn");
- assertEquals("mvn", cmd.getShell().getOriginalExecutable());
+ cmd.setExecutable(binary);
+ assertEquals(binary, cmd.getShell().getOriginalExecutable());
cmd.createArg().setValue("-version");
Process process = cmd.execute();
String out = IOUtil.toString(process.getInputStream());
@@ -94,11 +98,19 @@ void executeBinaryOnPath() throws Exception {
@Test
void execute() throws Exception {
// allow it to detect the proper shell here.
+ String executable = "echo";
Commandline cmd = new Commandline();
cmd.setWorkingDirectory(baseDir);
- cmd.setExecutable("echo");
- assertEquals("echo", cmd.getShell().getOriginalExecutable());
- cmd.createArgument().setValue("Hello");
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
+ cmd.createArg().setValue("Hello");
+ executable = "cmd";
+ cmd.createArg().setValue("/X");
+ cmd.createArg().setValue("/C");
+ cmd.createArg().setValue("echo");
+ }
+ cmd.setExecutable(executable);
+ assertEquals(executable, cmd.getShell().getOriginalExecutable());
+ cmd.createArg().setValue("Hello");
Process process = cmd.execute();
assertEquals("Hello", IOUtil.toString(process.getInputStream()).trim());
@@ -385,7 +397,10 @@ void dollarSignInArgumentPath() throws Exception {
cmd.getShell().setQuotedArgumentsEnabled(true);
cmd.setExecutable("cat");
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
- cmd.setExecutable("dir");
+ cmd.setExecutable("cmd");
+ cmd.createArg().setLine("/X");
+ cmd.createArg().setLine("/C");
+ cmd.createArg().setLine("dir");
}
cmd.setWorkingDirectory(dir);
cmd.createArg().setLine("test$1.txt");