在 Apache Commons CLI 中解析未知选项

问题描述 投票:0回答:1

有没有办法解析 Apache Commons CLI 中选项对象中不存在的未知选项。 例如-我的参数是

--greeting
hello
--unknownArgument
foo

选项对象有问候语作为选项:

options.addOption("greeting", true, "display greeting");

但是

unknownArgument
不是一个选择。

有没有办法我仍然可以接受它作为一个选项并进行进一步处理(将其发送到下游流程)?

apache-commons-cli
1个回答
0
投票

已解析的命令行有一个方法

getArgList()
,它返回所有剩余的未解析参数,所以听起来很匹配。

但是,如果您尝试传递命令行,commons-cli 会抱怨无法识别的选项。

使其工作的唯一方法是添加双破折号,这作为库应停止解析命令行选项的指示符。

例如请参阅以下代码片段,如果没有“--”,则无法解析参数:

    Option optGreeting = Option.builder()
            .hasArg(true)
            .longOpt("greeting")
            .build();
    Options opts = new Options();
    opts.addOption(optGreeting);

    String[] args = new String[] { "--greeting", "hello", "--", "--unknownArgument", "foo" };

    CommandLineParser parser = new DefaultParser();
    final CommandLine cmdLine;
    try {
        cmdLine = parser.parse(opts, args);
    } catch (ParseException ex) {
        System.err.println("Syntax error: " + ex.getMessage());
        return;
    }
    if (cmdLine.hasOption(optGreeting)) {
        for (String path : cmdLine.getOptionValues(optGreeting))
            System.out.println("greeting: " + path);
    }
    for (Object file : cmdLine.getArgList()) {
        System.out.println("additional: " + file);
    }
© www.soinside.com 2019 - 2024. All rights reserved.