2

Option( apache.commons.cli ) をコマンドおよびサブコマンドとして使用したい。

元。

  1. myprogram ジョブ -dryrun
  2. myprogram ジョブ -更新
  3. myprogram ジョブ -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'
4

1 に答える 1

0

なぜ OptionGroup を使用しているのですか? OptionBuilder を使用できます Commons CLI の使用シナリオを参照してください http://commons.apache.org/proper/commons-cli/usage.html作業中のプロジェクトの完全なコードについては、https://github.com/firefoxNX/StackOverflow/tree/masterを参照してください/コモンズクリ

        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());
            }
于 2014-06-12T19:12:57.090 に答える