[ https://issues.apache.org/jira/browse/EXEC-54?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13245078#comment-13245078 ]
Rupert Westenthaler commented on EXEC-54: ----------------------------------------- Came along the same "Issue" but with a different conclusion. (see http://markmail.org/message/xbcseasols7ae2mc for details) In short: Commons Exec does NOT double quote the parameter. The problem is that the "java" executable does not support quoted jar files (see also http://stackoverflow.com/questions/5569591/unable-to-access-jarfile-in-linux-land). So I assume this issue can be closed. However I would still be interested in an utility that can be used to escape (instead of quote) parsed parameters. This would be very handy when calling executable (like java) that do not interpret quotation marks. > Problem with argument containing spaces > --------------------------------------- > > Key: EXEC-54 > URL: https://issues.apache.org/jira/browse/EXEC-54 > Project: Commons Exec > Issue Type: Bug > Affects Versions: 1.1 > Environment: Mac OsX 10.6.6, JVM 1.6.0 > Reporter: Jeremias Rößler > Assignee: Siegfried Goeschl > Labels: arguments, quotes, spaces > > I am new to Commons Exec, so this could also be an error in usage, but... > When I use the {{CommandLine}} class to add a argument that contains spaces, > some quotes are added and are then part of the argument that is given. > For example: When I call {{java "what version"}} I get > {{java.lang.NoClassDefFoundError: what version}}, and when I call {{java > "\"what version\""}} (which contains escaped quotes, that are part of the > command line argument itself), I get {{java.lang.NoClassDefFoundError: "what > version"}}. > So the following test fails, because as you can see in the last line, Apache > Exec is producing the latter version where it should have produced the first > version: > {code:java} > @Test > public void testArgumentQuoting() throws Exception { > String argument = "what version"; > DefaultExecutor executor = new DefaultExecutor(); > DefaultExecuteResultHandler resultHandler = new > DefaultExecuteResultHandler(); > ByteArrayOutputStream out = new ByteArrayOutputStream(); > PumpStreamHandler streamHandler = new PumpStreamHandler(out, > out); > executor.setStreamHandler(streamHandler); > CommandLine cmdLine = new CommandLine("java"); > cmdLine.addArgument(argument); > executor.execute(cmdLine, resultHandler); > resultHandler.waitFor(); > String resultPattern = "Exception in thread \"main\" > java\\.lang\\.NoClassDefFoundError: ([\\w \"]+)"; > Pattern pattern = Pattern.compile(resultPattern); > Matcher matcher = pattern.matcher(out.toString()); > Assert.assertTrue(matcher.find()); > // Note: Result should be <what version> and NOT <"what > version">! > Assert.assertEquals(argument, matcher.group(1)); > } > {code} > Note that the same test passes if the space is removed from the argument. > Please also note, that I am not trying to start an external Java process, but > this is merely an example that I assume will work on every developers machine. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira