google-options 的 GitHub 页面指出 google-options 是“来自 Google (java) 人员的命令行参数解析库”。该页面继续说,“这是来自 Bazel 项目 的命令行参数解析器。 com.google.devtools.common.options
包已拆分为一个单独的 jar 以供通用使用。”这篇博文演示了应用 google-options 来处理来自 Java 代码的命令行选项。
本博文中用于演示 google-options 的示例类似于本系列前面 13 篇关于在 Java 中处理命令行选项的博文中使用的示例。此示例支持两个选项:一个必需的文件路径/名称选项,需要一个带有该路径和名称的 String 参数,以及一个没有参数的冗长选项(它的存在会导致冗长)。本文仅显示最相关的代码部分,但完整代码可在 GitHub 上获取。
基于 Java 的命令行处理的“定义”阶段是在 google-options 中通过扩展 google-options 类 com.google.devtools.common.options.OptionsBase 的自定义类完成的。自定义类应提供与预期命令行选项相对应的 public
字段,并且每个 public
字段都应使用 @Option 注释进行注释. @Option
注释需要两个元素(name 和 defaultValue)并允许可选元素,例如 help 和 缩写。自定义 Options
类的下一个代码清单中提供了此“定义”阶段的示例。
Options
类/** * Represents command-line options to be processed via * google-options library. Fields must be annotated with * @Option and must be public. */ public class Options extends OptionsBase { @Option(name="file", abbrev='f', help="Path and name of file", category="Startup", defaultValue="") public String filePathAndName; @Option(name="verbose", abbrev='v', help="Enable verbose output", category="Startup", defaultValue="false") public boolean verbose; }
@Option
注释的必需“name”元素指定“长”选项名称,而可选的“abbrev”元素指定“短”(单个字符)选项名称。 @Option
注释的可选“help”元素允许为选项提供“help”字符串,而必需的“defaultValue”元素指定选项的默认值。没有明确规定。
“解析”阶段是在 google-options 中通过实例化一个 OptionsParser 的实例来完成的,该实例与带有 Option
注释的 public
字段和自定义类关联然后在 OptionsParser
的实例上调用“解析”方法。下一个代码清单通过调用 OptionsParser.parseAndExitUponError(String[]) 方法演示了这一点。
final OptionsParser optionsParser = OptionsParser.newOptionsParser(Options.class); optionsParser.parseAndExitUponError(arguments);
使用 google-options 的“询问”阶段就像访问自定义类上带注释的 Option
字段一样简单,如下一个代码清单所示。
out.println( "Path/file name is '" + options.filePathAndName + "' and verbosity is '" + options.verbose + "'.");
下一个代码清单演示了如何使用 OptionsParser
方法 describeOptions 来显示帮助详细信息。
private static void printUsage(OptionsParser parser) { out.println("Usage: java Main <Options>"); out.println(parser.describeOptions(Collections.emptyMap(), OptionsParser.HelpVerbosity.LONG)); }
以下屏幕快照演示了上述代码清单。第一张图描述了在没有提供参数时提供的“帮助”信息,第二张图描述了以各种长格式和短格式表示的两个主要命令行选项。从第二张图片可以得出一个有趣的观察结果,即 google-options 自动支持 --noversion
选项,用于明确指定不冗长的 boolean
选项。
屏幕快照还表明 google-options 依赖于 Guava。
以下是在选择框架或库以帮助在 Java 中进行命令行解析时要考虑的 google-options 特征。
本系列中介绍的几个基于 Java 的命令行处理库使用注释来定义预期的选项,这就是 google-options 使用的方法。使用 google-options 对命令行选项的基本处理是一个相对简单的过程,但是对于尚未依赖 Guava 的简单应用程序来说,新的 Guava 依赖项的成本可能太高了。
标签2: Java教程地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-14-google-options.html