Apache Commons CLI 提供了一个简单的 API,用于呈现、处理和验证命令行界面。
CommandLineParser
一个实现 CommandLineParser 接口的类可以根据指定的选项解析一个字符串数组,并返回一个 CommandLine。所有实现类如下图:
BasicParser(已废弃)
提供了 flatten 方法的一个非常简单的实现,从 1.3 开始,使用 DefaultParser 代替。
CommandLine
表示根据 Options(选项)描述符解析的参数列表。
除了为需要参数的选项检索 getOptionValue(String opt) 之外,它还允许查询布尔 hasOption(String opt)。
此外,任何剩余的或无法识别的参数都可用于进一步处理。
CommandLine.Builder
使用描述性方法创建 CommandLine 实例的嵌套构建器类。
DefaultParser
默认的解析器。
DefaultParser.Builder
使用描述性方法创建 DefaultParser 实例的嵌套构建器类。使用示例:
DefaultParser parser = Option.builder() .setAllowPartialMatching(false) .setStripLeadingAndTrailingQuotes(false) .build();
GnuParser(已废弃)
提供了 flatten 方法的实现,从 1.3 开始,使用 DefaultParser 代替。
HelpFormatter
命令行选项的帮助消息格式化程序。示例:
Options options = new Options(); options.addOption(OptionBuilder.withLongOpt("file").withDescription("The file to be processed").hasArg().withArgName("FILE").isRequired().create('f')); options.addOption(OptionBuilder.withLongOpt("version").withDescription("Print the version of the application").create('v')); options.addOption(OptionBuilder.withLongOpt("help").create('h')); String header = "Do something useful with an input file\n\n"; String footer = "\nPlease report issues at http://example.com/issues"; HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("myapp", header, options, footer, true);
这将产生以下输出:
usage: myapp -f <FILE> [-h] [-v] Do something useful with an input file -f,--file <FILE> The file to be processed -h,--help -v,--version Print the version of the application Please report issues at http://example.com/issues
Option
用来描述单个命令行选项。它维护有关该选项的短名称、长名称(如果存在的话)、指示该选项是否需要参数的标志以及该选项的自文档描述的信息。
Option 不是独立创建的,而是通过 Options 的实例创建的。一个选项至少需要有一个短或长名称。
注意:一旦一个 Option 被添加到 Options 的实例中,它的必需标志就不能被改变。
Option.Builder
使用描述性方法创建 Option 实例的嵌套构建器类。使用示例:
Option option = Option.builder("a").required(true).longOpt("arg-name").build();
OptionBuilder(已废弃)
允许用户使用描述性方法创建选项。从 1.3 开始,使用 Option.builder(String) 代替。
注意:OptionBuilder 类不是线程安全的。
OptionGroup
一组相互排斥的选项,即这些选项是互斥的。
Options
Commons Cli 库的主要入口点。
Options 表示 Option 对象的集合,这些对象描述了命令行可能的选项。
它可以灵活地解析多头和空头选项,带或不带值。此外,它可以只解析命令行的一部分,从而允许灵活的多阶段解析。
Parser(已废弃)
从 1.3 开始,使用 flatten 方法的两遍解析(two-pass)不够灵活,无法处理复杂的情况。
PatternOptionBuilder
允许从单个字符串创建选项(Options),该模式包含各种单字符标志,并通过可选的标点符号表示其期望的类型。
PatternOptionBuilder 模式如下:
例如,下面的命令允许 '-v -p string-value -f /dir/file' 的命令行标志。感叹号位于必选选项前面。
Options options = PatternOptionBuilder.parsePattern("vp:!f/");
PosixParser(已废弃)
提供了 flatten 方法的实现。从 1.3 开始,使用 DefaultParser 代替。
TypeHandler
这是一个临时实现。TypeHandler 将处理 OptionTypes 的可插拔性,它将把所有这些类型的转换功能引导到 Commons 中的 ConvertUtils 组件。
AlreadySelectedException 当提供了选项组中的多个选项时抛出。
AmbiguousOptionException 当无法从部分名称识别选项时引发的异常。
MissingArgumentException 当需要参数的选项未提供参数时抛出。
MissingOptionException 当未提供所需选项时抛出。
ParseException 在命令行解析期间抛出的基础异常。
UnrecognizedOptionException 在解析一个无法识别的选项时抛出。
异常类的继承关系如下图:
从上图可知,ParseException 异常是 Commons Cli 的基础异常类。