我正在用Java编写命令行应用程序,并且选择了Apache Commons CLI来解析输入参数。

假设我有两个必需的选项(即-input和-output)。我创建新的Option对象并设置必需标志。现在一切都很好。但是我有第三,不是必需的选项,即。 -救命。使用我已经提到的设置,当用户想要显示帮助时(使用-help选项),它说“-input and -output”是必需的。有什么方法可以实现这一点(通过Commons CLI API,如果(!hasOption)抛出新的XXXException()则不容易)。

最佳答案

在这种情况下,您必须定义两组选项并两次分析命令行。第一组选项包含所需组之前的选项(通常为--help--version),第二组选项包含所有选项。

首先分析第一组选项,如果找不到匹配项,则继续第二组。

这是一个例子:

Options options1 = new Options();
options1.add(OptionsBuilder.withLongOpt("help").create("h"));
options1.add(OptionsBuilder.withLongOpt("version").create());

// this parses the command line but doesn't throw an exception on unknown options
CommandLine cl = new DefaultParser().parse(options1, args, true);

if (!cl.getOptions().isEmpty()) {

    // print the help or the version there.

} else {
    OptionGroup group = new OptionGroup();
    group.add(OptionsBuilder.withLongOpt("input").hasArg().create("i"));
    group.add(OptionsBuilder.withLongOpt("output").hasArg().create("o"));
    group.setRequired(true);

    Options options2 = new Options();
    options2.addOptionGroup(group);

    // add more options there.

    try {
        cl = new DefaultParser().parse(options2, args);

        // do something useful here.

    } catch (ParseException e) {
        // print a meaningful error message here.
    }
}

关于java - Commons CLI必需的组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10798208/

10-10 22:44