You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Commons CLI中解析未定义的未知选项?

Apache Commons CLI 处理未定义的未知选项

当然可以处理未在Options中定义的未知选项,不过默认解析器会直接抛出ParseException,需要调整解析器配置来开启未知选项支持,具体步骤如下:

1. 开启未知选项允许模式

使用DefaultParser时,调用setAllowUnrecognizedOptions(true)方法,让解析器忽略未定义选项的报错,转而收集这些未知内容:

DefaultParser parser = new DefaultParser();
parser.setAllowUnrecognizedOptions(true);

2. 获取并处理未知选项

解析完成后,通过CommandLine对象的getUnrecognizedOptions()方法,可以获取所有未被识别的选项及其参数(返回List<String>类型)。比如你提到的--unknownArgument foo,会被收集为["--unknownArgument", "foo"]。

完整示例代码

import org.apache.commons.cli.*;
import java.util.List;

public class UnknownOptionDemo {
    public static void main(String[] args) throws ParseException {
        // 定义已知选项
        Options options = new Options();
        options.addOption("greeting", true, "display greeting");

        // 配置解析器允许未知选项
        DefaultParser parser = new DefaultParser();
        parser.setAllowUnrecognizedOptions(true);
        CommandLine cmd = parser.parse(options, args);

        // 处理已知选项
        if (cmd.hasOption("greeting")) {
            System.out.println("已识别问候语:" + cmd.getOptionValue("greeting"));
        }

        // 处理未知选项,可传递给下游流程
        List<String> unknownOpts = cmd.getUnrecognizedOptions();
        if (!unknownOpts.isEmpty()) {
            System.out.println("检测到未知选项及参数:");
            unknownOpts.forEach(opt -> System.out.println("  " + opt));
            // 此处可将unknownOpts直接传递给下游逻辑,比如转成数组或直接传入方法
        }
    }
}

运行时传入参数--greeting hello --unknownArgument foo,会输出:

已识别问候语:hello
检测到未知选项及参数:
  --unknownArgument
  foo

版本注意事项

如果使用Apache Commons CLI 1.3及更早版本,CommandLine没有getUnrecognizedOptions()方法,此时未知选项会被放入getArgs()返回的列表中,处理逻辑需要自行区分选项和普通参数。

内容的提问来源于stack exchange,提问作者J-T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:37:44