Java 命令行接口(第 4 部分):命令行

位置:首页>文章>详情   分类:Java教程   阅读(125)   2023-12-08 16:34:57

我的 Java 命令行解析系列文章的第四部分介绍了 Commandline,它被描述为“一个用于解析命令行参数的 Java 库”,它“基于通过使用注释将命令行参数映射到对象。”

与之前介绍的 args4jjbock 一样,Commandline 使用注释来提供潜在命令行选项的“定义”。然而,虽然 args4j 通过类字段上的注释来实现这一点,而 jbock 通过构造函数及其参数上的注释来实现这一点,但 Commandline 在“set”(mutator)方法上使用注释。在这篇文章中,我使用了一个 Main 类示例,就像之前关于基于 Java 的命令行处理的文章中一样,但在正常情况下,我通常更喜欢用一个特殊的类来表示命令行争论。

下面的代码清单演示了在“get”方法上使用命令行注释来实现 Commandline 命令行处理的“定义”阶段。

命令行处理的命令行“定义”阶段

public class Main
{
   /** Is verbosity enabled? */
   private boolean verbose;

   /** Name/path of applicable file. */
   private String fileName;

   @Option
   @ShortSwitch("v")
   @LongSwitch("verbose")
   @Toggle(true)
   public void setVerbose(final boolean newVerbose)
   {
      verbose = newVerbose;
   }

   @Option
   @ShortSwitch("f")
   @LongSwitch("file")
   @SingleArgument
   @Required
   public void setFileName(final String newFileName)
   {
      fileName = newFileName;
   }

上面的代码清单显示了命令行注释 @Option 的使用以及其他自定义定义选项的注释(@ShortSwitch@LongSwitch 用于短参数和长参数, @Required 用于强制参数,@SingleArgument 用于指定与开关关联的一个参数,而 @Toggle 用于指示开关的存在或不存在是什么显着[没有与该开关相关的参数])。

下一个代码清单演示了使用 Commandline 进行命令行解析的“解析”和“询问”阶段。

使用命令行“解析”和“询问”

try
{
   // "Parsing" stage.
   final Main main = CommandLineParser.parse(
      Main.class, arguments, OptionStyle.LONG_OR_COMPACT);

   // "Interrogation" stage.
   out.println("You provided file name of '" + main.fileName
      + "' and verbose is set to '" + main.verbose + "'.");
}
catch (IllegalAccessException | InstantiationException | InvocationTargetException exception)
{
   out.println("ERROR: Unable to parse command-line arguments: " + exception);
}

最后一个代码示例演示了解析是通过单个 CommandLineParser.parse(Class<T>, String[], OptionStyle) 调用完成的,查询就像访问该方法返回的实例的成员一样简单。提供给 parse 方法的第三个参数很重要,因为它指示解析器如何期望显示开关。

刚刚显示的代码示例使用 OptionStyle.LONG_OR_COMPACT,文档对其进行了描述:“长开关前面有两个破折号。短开关前面有一个破折号,可以连接成一个开关。”相反,OptionStyle.SIMPLE 指示解析器期望“所有开关都必须是独立的”和“所有(长和短)都需要在命令行上加上一个破折号。”

下一个屏幕快照演示了这个简单的应用程序的运行情况。

如果未提供必需的参数,则会显示一条消息(包括堆栈跟踪),如下一个屏幕快照所示。

我没有在此处包含使用帮助或基于命令行的用法的示例,因为正如项目的 GitHub 页面 所述,“生成帮助文本”是“目前不受支持的功能”。

以下是在选择库以帮助在 Java 中进行命令行解析时要考虑的命令行的一些其他特性。

  • Commandline 是开源的,并根据 Apache License Version 2.0 获得许可。
  • 当前版本的命令行 (1.7.0) 至少需要 Java SE 7
  • commandline-1.7.0.jar 的大小约为 38 KB,并且不依赖于任何其他库。

Commandline 是 Java 开发人员可用的众多开源命令行处理库中的另一个,并且与其他几个库一样,它使用注释来完成大部分繁重的工作。

其他参考资料

  • GitHub 上的命令行
  • Maven Central 上的命令行
标签: Java教程
地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-4-commandline.html