Hi there,
I'm trying to implement a command line parser using Apache Commons CLI v. 1.2
(unfortunately I am forced to use that version). The syntax to be accepted is
quite simple:
MyProg [ -x path[:path]... ] [ file1 ... ]
Option '-x' should accept a search path like sequence of directories (separated
by ':') optionally followed by zero or more file names. My code looks as
follows:
Option dbPath = OptionBuilder.withLongOpt("db_path")
.withDescription("DB search path")
.hasArgs()
.withValueSeparator(':')
.withArgName("Path[:Path]...")
.create('x');
Options opts = new Options();
opts.addOption(dbPath);
String[] args = new String[] { "-x", "path1:path2", "file1", "file2" };
CommandLineParser parser = new PosixParser();
CommandLine cmdLine = null;
try {
cmdLine = parser.parse(opts, args);
} catch (ParseException ex) {
System.out.println("Syntax error: " + ex.getMessage());
return;
}
if (cmdLine.hasOption('x')) {
for (String path : cmdLine.getOptionValues('x'))
System.out.println("path: " + path);
}
for (Object file : cmdLine.getArgList()) {
System.out.println("file: " + file);
}
Surprisingly this doesn't function as expected. This is the output I get:
path: path1
path: path2
path: file1
path: file2
Not only the two '-x' option values ('path1', 'path2') but also the file
arguments are returned when the getOptionValues('x') function is called. No
matter which parser class I use (BasicParser, GnuParser or PosixParser), the
result is always the same.
What am I doing wrong?
Adalbert.