2012-07-12 116 views
2

我正在使用apache commons.cli库来解析命令行参数。默认的解析行为是它基于空间解析参数。我使用ant将参数传递给我的Java程序,并且ant使用的语法略有不同,并且使用的是=而不是空格。我如何改变我解析的行为,它基于= 而不是空格? 我分析目前看起来是这样的:根据'='解析命令行参数

Options options = new Options(); 
    options.addOption("Dkey", true, "some parameter"); 
    CommandLineParser parser = new PosixParser(); 
    CommandLine cmd = parser.parse(options, args); 

回答

4

看一看的usage examples page,尤其是蚂蚁的例子。

您可以使用OptionBuilder并为具有2个参数的D创建一个选项。

对于你的情况从该页面的适应例子看起来是这样的:

Option property = OptionBuilder.withArgName("key=value") 
          .hasArgs(2) 
          .withValueSeparator() 
          .withDescription("use value for given property") 
          .create("D"); 

下面是相关的JavaDoc另一个例子:http://commons.apache.org/cli/api-1.2/org/apache/commons/cli/OptionBuilder.html#withValueSeparator%28%29

Option opt = OptionBuilder.withValueSeparator().create('D'); 

CommandLine line = parser.parse(args); 
String propertyName = opt.getValue(0); 
String propertyValue = opt.getValue(1); 
+0

它,当我使用的CommandLine线=解析器抱怨。解析(参数);只允许CommandLine line = parser.parse(options,args); ? – comatose 2012-07-12 14:24:24

+0

@comatose这可能是一个版本问题:要么使用旧版本,他们没有更新他们的文档,或者我偶然链接了旧文档。 - 或者他们只是在他们的文档中有一个错误,他们毕竟是人类:) - 如果'parser.parse(options,args)'有效,那就使用它。 – Thomas 2012-07-12 14:59:15