【问题标题】:Apache.commons.cli Command Line ArgumentsApache.commons.cli 命令行参数
【发布时间】:2014-08-02 09:42:14
【问题描述】:

想使用Option(apache.commons.cli) 作为命令和子命令。

例如

  1. 我的程序作业 -dryrun
  2. 我的程序作业-更新
  3. 我的程序作业 -update -dryrun

最好的方法是什么?

用简单的程序试过:

public static void main(String[] args) throws ParseException {
    test("job", "-update"); //works fine
    test("job", "-dryrun"); //works fine
    test("job", "-update", "-dryrun"); // doesn't work
}
public static void test(String... args) throws ParseException {
    GnuParser parser = new GnuParser();
    Options options = new Options();
    OptionGroup option = new OptionGroup();
    option.addOption(new Option("dryrun", "dryrun"));
    option.addOption(new Option("update", "update"));
    options.addOptionGroup(option);
    parser.parse(options, args);
}

错误:

test("job", "-update", "-dryrun");
fails with, Exception in thread "main" org.apache.commons.cli.AlreadySelectedException: The option 'dryrun' was specified but an option from this group has already been selected: 'update'

【问题讨论】:

    标签: java apache-commons-cli


    【解决方案1】:

    您为什么使用 OptionGroup?您可以使用 OptionBuilder 参见 Commons CLI Usage Scenarios http://commons.apache.org/proper/commons-cli/usage.html 有关工作项目的完整代码,请参见 https://github.com/firefoxNX/StackOverflow/tree/master/CommonsCli

            Options options = new Options();
            Option dryrunOption = OptionBuilder.withArgName("dryrun")
                    .withDescription("dry run").create("dryrun");
            options.addOption(dryrunOption);
    
            Option updateOption = OptionBuilder.withArgName("update")
                    .withDescription("update").create("update");
            options.addOption(updateOption);
    
            // create the parser
            GnuParser parser = new GnuParser();
                // parse the command line arguments
                CommandLine line = parser.parse(options, args);
                Option[] opts = line.getOptions();
                for(String arg: line.getArgs()){
                    System.out.println(arg);
                }
                for(Option opt: opts){
                    System.out.println(opt.getOpt()+" : "+opt.getValue());
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 2011-02-25
      • 2013-02-14
      相关资源
      最近更新 更多