这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库。 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高和最受欢迎的库之一: JCommander 。

JCommander的网页上指出:“因为生命太短,无法解析命令行参数”,并且概述将JCommander引入为“一个很小的Java框架,使得解析命令行参数变得微不足道。” 本文中的代码示例和执行代码的关联屏幕快照均基于JCommander 1.72 (2017年6月)。 此处显示的演示的完整代码可在GitHub上找到 。

JCommander使用批注来实现命令行处理的“定义”阶段。 下一个代码清单片段中对此进行了演示。

JCommander的“定义”阶段

/*** Demonstrates use of JCommander for Java-based command-line processing.*/
public class Main
{@Parameter(names={"-v","--verbose"},description="Enable verbose logging")private boolean verbose;@Parameter(names={"-f","--file"},description="Path and name of file to use",required=true)private String file;@Parameter(names={"-h", "--help"},description="Help/Usage",help=true)private boolean help;// . . .final JCommander commander= JCommander.newBuilder().programName("JCommander Demonstration").addObject(this).build();

刚刚显示的代码清单演示了如何使用JCommander的@Parameter批注通过类字段的批注来定义命令行选项。 这些示例演示了names说明,以指示与单个选项关联的多个选项标志;提供description以提供每个选项的说明; required=true以强制存在命令行参数, help=true以指示“帮助”。 ”或“使用”命令行参数(指示JCommander如果未提供必需的参数也不要抛出异常)。

通过用@Parameter注释注释的类属性,可以将带有注释字段的类的实例用于创建JCommander类的实例。 在上面的代码示例中,我利用了JCommander.Builder以获得与使用构建器相关的更大的流利性和其他优势。 特别是,带有注释的类字段的实例是通过addObject(Object)方法添加的。

通过对刚刚实例化的JCommander实例执行parse(String…)方法的单行调用,可以完成JCommander命令行处理的“解析”阶段。 下一个代码清单对此进行了演示。

使用JCommander进行“解析”阶段

commander.parse(arguments);

使用JCommander进行命令行处理的“询问”阶段涉及简单地访问传递给JCommander类实例化的实例的带注释的字段。 下一个代码清单对此进行了演示。

JCommander的“审讯”阶段

if (help)
{commander.usage();
}
else
{out.println("The file name provided is '" + file + "' and verbosity is set to " + verbose);
}

最后一个代码清单演示了确定--help-h规范是否设置名称为helpboolean属性的能力。 由于它是一个简单的boolean ,因此可以在条件条件中使用,如果为true ,则可以显示帮助/使用信息。 在未设置“ help”标志的情况下,将访问与其他命令行选项关联的值(“ verbose” / -v / --verbose和“ file” / -f / --file )。

最新的代码清单还演示了如何通过在JCommander类的实例上调用方法JCommander ()将用法信息写入标准输出。 值得注意的是ParameterException也有一个usage()方法 。

下一系列屏幕快照演示了如何将JCommander与包含上述代码段的简单应用程序一起使用。 第一个图像显示了不带任何参数运行基于JCommander的应用程序,并显示了在这种情况下显示的ParameterException ,因为未指定必需的--file / -f选项。

当提供了预期的命令行参数时,下一个屏幕快照将演示“正常”执行。

下一个屏幕快照演示了“帮助”选项的使用。 由于使用help=true进行了注释,因此缺少必需的“文件”命令行参数不会导致异常,并且自动生成的帮助/使用信息将写入标准输出。

JCommander提供了我非常喜欢的用于开发和学习JCommander的功能。 可以通过在JCommandBuilder上调用verbose(int)方法来指定JCommander解析的详细 程度 。

增加JCommander的详细程度

final JCommander commander= JCommander.newBuilder().programName("JCommander Demonstration").addObject(this).verbose(1).build();

随着冗长程度的提高,可以发现对JCommander正在执行的与命令行处理有关的更多信息,并在以下两个屏幕快照中得以证明。

在选择框架或库来帮助Java进行命令行解析时,需要考虑以下JCommander的其他特征。

  • JCommander是开源的,并获得了Apache License 2.0的许可 。
  • jcommander-1.72.jar大小约为68 KB,没有第三方库编译依赖项。
  • JCommander文档提供了将JCommander与Kotlin一起使用以及将JCommander与Groovy 一起使用的示例 。
  • JCommander仍然受到TestNG创作者Cedric Beust的积极支持, 其网页反映了其现代/当前的支持。

其他参考

  • 指挥官
  • Maven存储库上的JCommander
  • GitHub上的JCommander源
  • JCommander API (Javadoc)
  • 使用JCommander的复杂行命令语法
  • JCommander –轻松解析命令行参数
  • 使用JCommander轻松进行命令行界面编码
  • Args4j vs JCommander用于解析命令行参数
  • 使用JCommander和Spring的Java命令行标志
  • JCommander与args4j

翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-7-jcommander.html

Java命令行界面(第7部分):JCommander相关推荐

  1. Java命令行界面(第10部分):picocli

    picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助 ...

  2. Java命令行界面(第6部分):JOpt简单

    JOpt Simple的主页将这个基于Java的库称为"用于解析命令行选项的Java库,例如您可能传递给调用javac的Java库,"该Java库试图"使用POSIX g ...

  3. Java命令行界面(第21部分):航空公司2

    本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个Java库,提供了基于注释的 ...

  4. Java命令行界面(第1部分):Apache Commons CLI

    尽管我通常使用Groovy编写要从命令行运行的JVM托管脚本,但是有时候我需要解析Java应用程序中的命令行参数,并且有很多库可供Java开发人员用来解析命令行参数. 在本文中,我将介绍这些Java命 ...

  5. Java命令行界面(第18部分):JCLAP

    Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库. 这篇文章的示例基于需要Java 8的 JCLAP 1.4 . ...

  6. Java命令行界面(第28部分):getopt4j

    getopt4j的页面将其描述为"一个根据GNU样式解析命令行参数的库." 然后, 页面介绍getopt4j :"'getopt4j'库旨在以与glibc (GNU C运 ...

  7. Java命令行界面(第30部分):观察

    这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数. 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点,并提供 ...

  8. Java命令行界面(第12部分):CLAJR

    第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR). 该"库"是单个Java源文件( CLAJR-0.9.java ...

  9. Java命令行界面(第3部分):jbock

    在本系列中有关使用Java进行命令行分析的前两篇文章中,我介绍了Apache Commons CLI和args4j库. 在本系列的第三篇文章中,我将介绍jbock ,它是自我描述的"非常简单 ...

最新文章

  1. 央视深入报道,国内主流芯片真实水平如何?
  2. SQL Server 2005 For XML[学习]
  3. 8786:方格取数 (多线程dp)
  4. verilog定时打铃上下课程序设计
  5. delphi7 如何判定dbgrid两行重复_教你如何在服装上加入好看的毛线刺绣花边
  6. Python: 自定义类对象序列化为Json串
  7. 如何用手机NFC代替小区门禁?
  8. pat 团体天梯 L3-011. 直捣黄龙
  9. RMAN深入解析之--内存中的RMAN
  10. vb 计算机cot,VB编程中运算sin、cos、tan、cot的程序怎么写?
  11. 【高频电子线路】[模型]阻抗变换与阻抗匹配(第2章 谐振功率放大器)
  12. Bp算法公式推导推导-详解
  13. 无线网络技术导论笔记(第五讲)
  14. 图像处理之灰度化和二值化
  15. 字符图形7-星号菱形
  16. 计算机控制课程设计体会,计算机控制技术课程设计心得体会
  17. Microsoft 提供的 USB 驱动程序
  18. 《别做正常的傻瓜》后续笔记—幸福的准则
  19. SpringBoot之使用Security
  20. 通过PC获取Tello无人机视频图像和发送控制命令

热门文章

  1. 利用JEXL实现动态表达式编译
  2. Spring 事务原理和使用
  3. Java 可重入锁内存可见性分析
  4. Hadoop入门(一)概念与单机安装
  5. 【LSB】图片隐写文档大纲
  6. JDBC的SQL注入漏洞
  7. 微信JS-SDK实现分享功能
  8. apache.camel_Apache Camel 3.2 – Camel的无反射配置
  9. oracle密码不能重复用_重复码
  10. lambda层保存模型出错_保存您的lambda,以备不时之需-保存到文件