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

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(306)   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 上的命令行
标签2: Java教程
地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-4-commandline.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...