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
相关产品推荐
相关产品推荐

