[
https://issues.apache.org/jira/browse/CLI-288?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16569135#comment-16569135
]
NIRAJ RATHI commented on CLI-288:
---------------------------------
The problem is the way JVM is converting input comand line argument to String
array.
{code:java}
public static void main(String[] args) throws Exception {
for ( String arg: args )
{
System.out.println(arg);
}
}
{code}
For command line cmd="less -opt2"
String array to main is [--cmd='less, -opt2'] instead of 3 Strings only 2 are
here.
For command line cmd "less -opt2"
String array to main is [--cmd, 'less, -opt2'] here we have 3 Strings.
Option parsing is based on String array prepared by JVM.
In case of second one DefaultParser treat -opt2 as unknown option.
> Inconsistent parsing of unlimited option values
> -----------------------------------------------
>
> Key: CLI-288
> URL: https://issues.apache.org/jira/browse/CLI-288
> Project: Commons CLI
> Issue Type: Bug
> Components: Parser
> Affects Versions: 1.4
> Reporter: Adam Cardenas
> Priority: Major
>
> with the following configuration...
> {code:java}
> DefaultParser parser = new DefaultParser();
> Options opts = new Options();
> Option pager = Option.builder(null)
> .longOpt("cmd")
> .hasArg()
> .numberOfArgs(Option.UNLIMITED_VALUES)
> .build();
> opts.addOption(pager);
> {code}
>
> This works as long as the value of *cmd* is a single value.
> {code}
> $ myApp --cmd='less'
> {code}
> The following does not work, as soon as we add options to less
> {code}
> $ myApp --cmd='less -XFR'
> Exception in thread "main" com.cevaris.ag4j.cli.AppArgsException:
> org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option: -XFR
> at com.cevaris.ag4j.cli.ApacheAppArgs.parse(ApacheAppArgs.java:33)
> at com.cevaris.ag4j.Main.main(Main.java:61)
> Caused by: org.apache.commons.cli.UnrecognizedOptionException: Unrecognized
> option: -XFR
> at
> org.apache.commons.cli.DefaultParser.handleUnknownToken(DefaultParser.java:360)
> at
> org.apache.commons.cli.DefaultParser.handleConcatenatedOptions(DefaultParser.java:702)
> at
> org.apache.commons.cli.DefaultParser.handleShortAndLongOption(DefaultParser.java:533)
> at
> org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:243)
> at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
> at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
> at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
> at com.cevaris.ag4j.cli.ApacheAppArgs.parse(ApacheAppArgs.java:31)'
> {code}
> The following works, as long as we use a space to separate option & value,
> rather than using an *=*
> {code}
> $ myApp --cmd 'less -XFR' # works
> $ myApp --cmd='less -XFR' # fails
> {code}
> Attempted to use *.valueSeparator()* with no luck.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)