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 c06147a9..4cd213b0 100644
--- a/src/main/java/org/codehaus/plexus/util/cli/Commandline.java
+++ b/src/main/java/org/codehaus/plexus/util/cli/Commandline.java
@@ -491,34 +491,32 @@ public String[] getEnvironmentVariables()
}
/**
+ * 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()
{
final String[] args = getArguments();
- String executable = getLiteralExecutable();
+ String executableTmp = getLiteralExecutable();
- if ( executable == null )
+ if ( executableTmp == null )
{
return args;
}
final String[] result = new String[args.length + 1];
- result[0] = executable;
+ result[0] = executableTmp;
System.arraycopy( args, 0, result, 1, args.length );
return result;
}
@@ -568,7 +566,7 @@ public String toString()
public int size()
{
- return getCommandline().length;
+ return getRawCommandline().length;
}
@Override
@@ -668,7 +666,7 @@ public Process execute()
{
if ( workingDir == null )
{
- process = Runtime.getRuntime().exec( getCommandline(), environment, workingDir );
+ process = Runtime.getRuntime().exec( getRawCommandline(), environment, workingDir );
}
else
{
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 28ec8297..65392bde 100644
--- a/src/test/java/org/codehaus/plexus/util/cli/CommandlineTest.java
+++ b/src/test/java/org/codehaus/plexus/util/cli/CommandlineTest.java
@@ -77,10 +77,15 @@ public void testExecuteBinaryOnPath()
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 +99,20 @@ public void testExecute()
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() );
@@ -460,7 +474,10 @@ public void testDollarSignInArgumentPath()
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" );