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

Apache Commons CLI 1.5.0:如何禁止重复选项并强制单参数?

用Commons-CLI 1.5.0禁止重复选项的解决方案

你需要给-src和-dst选项设置最大出现次数限制——默认的hasArgs()或numberOfArgs()仅控制单个选项能接收的参数数量,并不限制选项本身的重复出现次数。

具体做法是在创建Option时调用maximumOccurrences(1)方法,搭配hasArg(true)(指定选项需要参数)和required(true)(确保选项必须出现),示例代码如下:

import org.apache.commons.cli.*;

public class Process {
    public static void main(String[] args) {
        Options options = new Options();

        // 配置-src选项:必填、需参数、最多出现1次
        Option srcOpt = Option.builder("src")
                .required(true)
                .hasArg(true)
                .maximumOccurrences(1)
                .build();
        
        // 配置-dst选项:必填、需参数、最多出现1次
        Option dstOpt = Option.builder("dst")
                .required(true)
                .hasArg(true)
                .maximumOccurrences(1)
                .build();

        options.addOption(srcOpt);
        options.addOption(dstOpt);

        CommandLineParser parser = new DefaultParser();
        try {
            CommandLine cmd = parser.parse(options, args);
            // 获取参数并处理逻辑
            String srcPath = cmd.getOptionValue("src");
            String dstPath = cmd.getOptionValue("dst");
            System.out.printf("源路径: %s,目标路径: %s%n", srcPath, dstPath);
        } catch (ParseException e) {
            System.err.println("参数错误: " + e.getMessage());
            // 打印帮助信息
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("Process", options);
        }
    }
}

当用户输入重复选项(比如Process -src aaa.txt -src bbb.txt -dst result.txt)时,DefaultParser.parse()会直接抛出ParseException,错误信息类似:Option 'src' appears too many times. Maximum 1 allowed,从而达到禁止重复选项的效果。

内容的提问来源于stack exchange,提问作者Leszek Pachura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:55:23