本系列中有关使用Java解析命令行参数的第一篇文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一。 Apache Commons CLI确实显示了它的时代,特别是与一些更现代的基于Java的命令行处理库相比时。 Mark A. Ziesemer的“ Apache Commons CLI上的CLI库包装”,称为MarkUtils-CLI,旨在“现代化” Apache Commons CLI,并且是本博客文章的主题。

Ziesemer在博客文章“ MarkUtils-CLI:Apache Commons CLI的注释(及更多) ”中写道:


我觉得Apache Commons CLI项目卖空了。 我发现它是一个非常全面,设计良好的库,可以有效地解析命令行。 我观察到的唯一缺点是该项目是在Java 5和注释可用之前开发的。 因此,该库不支持注释必须提供的任何功能。

引入MarkUtils的最新功能:MarkUtils-CLI是一个库,可在Apache Commons CLI和Java注释之间提供有效的桥梁,而无需替换成熟的Commons CLI库。

这篇文章使用的示例与本系列以前的文章(“文件”和“详细”命令行选项)相似,以说明MarkUtils-CLI如何包装Apache Commons CLI,并允许通过注释定义选项并提供类型化选项。 在本文中,使用MarkUtils-CLI的CliRunner是为了方便。 这些示例的完整源代码清单可在GitHub上找到 。

MarkUtils-CLI的“定义”阶段是应用@Parameter注释的地方,如下面的代码清单所示。

MarkUtils-CLI的“定义”阶段

@Parameter(name="f", longName="file", description="Path/name of file", required=true)
public String file;@Parameter(name="v", longName="verbose", description="Verbosity enabled or not", argCount=0)
public boolean verbose;

此代码清单显示了如何将“短”选项名称 (单个连字符/单个字符)和“长”选项名称 (双连字符/单词)指定为@Parameter批注的不同元素。 MarkUtils-CLI创建的“帮助”中可以使用“ description ”元素,并且“ required ”注释元素允许您指定必需的选项。 将“详细”指定为argCount时 ,还向解析器指示“详细”选项不需要任何参数。

可以通过CliRunner和Apache Commons CLI CommandLineParser的实例在MarkUtils-CLI中完成“解析”阶段。 在下一个代码清单中对此进行了演示,其中将Apache Commons CLI的DefaultParser实例与该类的实例(其字段使用@Parameter注释进行注释)一起传递给CliRunner的构造函数。

MarkUtils-CLI的“解析”阶段

final DefaultParser cmdLineParser = new DefaultParser();
final CliRunner<Main> cliRunner = new CliRunner(cmdLineParser, Main.class);

当使用MarkUtils-CLI的CliRunner方法时,“询问”阶段是在Callable的call()方法中完成的,该方法传递给CliRunner的“ run”方法。 下一个代码清单中显示了“ call()”方法的实现, 在GitHub的完整源代码清单中提供了将拥有的Callable传递给CliRunner的“ run”方法的代码 。

MarkUtils-CLI的“审讯”阶段

@Override
public Integer call() throws Exception
{out.println("File path/name is '" + file + "' and verbosity is " + verbose);return file != null ? 0 : -1;
}

后面的两个屏幕快照演示了到目前为止显示的示例。 第一张图片显示了当没有提供所需的“文件”选项时生成的帮助信息。 第二张图片描述了“文件”和“详细”的短名称和长名称选项的各种组合的示例代码的行为。

选择框架或库来帮助Java进行命令行解析时,需要考虑MarkUtils-CLI的特征。

  • MarkUtils-CLI是开源的,并根据GNU通用公共许可证版本3 获得 许可 。

    • 一些 ,尤其是企业看来,是不舒服与GPLv3的许可证。
  • MarkUtils-CLI可作为单独的JAR获得,但从概念上讲,它是可从https://java.ziesemer.com/获得的更大MarkUtils的一部分。
  • com.ziesemer.utils.cli-2017.05.28.jar JAR相对较小(大约26 KB),但对外部库Apache Commons CLI具有运行时依赖性(预期是因为MarkUtils-CLI包装此库)和SLF4J (因为SLF4J为广泛使用的库,对于许多人来说,这种依赖性可能不是什么大问题。
  • MarkUtils-CLI需要Java SE 6 。
  • MarkUtils-CLI的作者向我通知了该库的存在,并且似乎正在积极地支持它,这对于本系列中的所有库都是无法说的。 他已经表示,他“致力于响应和解决遇到的任何问题 ” MarkUtils-CLI GitHub Issues Tracker 。 他还指出,有95个正在执行的单元测试,这些测试验证了MarkUtils-CLI的功能。

MarkUtils-CLI是Apache Commons CLI的小型包装,通过使用批注和命令行选项类型的处理,使Apache Commons CLI体验现代化。 MarkUtils-CLI很可能会吸引那些已经在使用Apache Commons CLI的用户,并希望享受更轻松的带有注释的选项定义和更多类型安全的选项解析的好处。 该库的优点包括库的当前支持和全面的单元测试。 可能阻止某些人使用该库的问题是其GPL许可证及其对SLF4J的外部依赖关系(假定Apache Commons CLI依赖关系不是问题,因为它被宣传为Apache Commons CLI的包装器)。

其他参考

  • MarkUtils-CLI:Apache Commons CLI的注释(及更多) (主博客文章)
  • MarkUtils-CLI下载
  • MarkUtils-CLI API文档 (Javadoc)
  • MarkUtils问题
  • https://java.ziesemer.com/ (包括MarkUtils-CLI在内的各种Java项目)
  • MarkUtils-CLI SureFire报告 (95个单元测试)
  • MarkUtils博客文章

翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-24-markutils-cli.html

Java命令行界面(第24部分):MarkUtils-CLI相关推荐

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

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

  2. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  3. java面试题24 关于Java中的数组,

    java面试题24 关于Java中的数组,下面的一些描述,哪些描述是准确的:(        ) A 数组是一个对象,不同类型的数组具有不同的类 B 数组长度是可以动态调整的 C 数组是一个连续的存储 ...

  4. maven:Exception in thread main java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenC

    小编今天学习maven时遇到关于版本的问题,百度了许多资料,都说需要更换jdk的版本: 小编在开发中使用的myelcipse2010编译器,最高自带jdk版本是1.6;但是在小编的努力不断尝试下,终于 ...

  5. 1、《学通Java Web的24堂课》纠错之一 —— 开篇:《学通Java Web的24堂课》简介

    2012年3月8日购于卓越网(真是个好日子) 基本信息 出版社: 清华大学出版社; 第1版 (2011年7月2日) 丛书名: 软件开发羊皮卷 平装: 718页 正文语种: 简体中文 开本: 16 IS ...

  6. java速算24,Java扑克牌速算24的方法

    已知一副扑克牌有54张,去除大王和小王,剩余52张.在其中随机抽取4张牌,利用加减乘除进行计算得到24. 从A到10,他们的值分别为1到10. 从J到K,他们对应的值是减去10以后的值.编写程序生成一 ...

  7. java expextion_Java(20~24)

    1.Collection中的集合称为单列集合,Map中的集合称为双列集合(键值对集合). 2.Map常用方法:map.put()   map.get()   map.remove()   map.ke ...

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

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

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

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

最新文章

  1. teamcity plugin中读取js和css文件的方法
  2. 基于地平面的单目视觉里程计绝对尺度估计
  3. 使用 Android Studio 进行测试 (二) UI 测试
  4. Java并发编程:进程和线程之由来
  5. 转载:c+string类详解
  6. java tostring格式化日期_java日期格式化SimpleDateFormat的使用详解
  7. 边缘节点服务ENS > 产品简介 > 什么是边缘节点服务ENS
  8. asp.net web新闻发布系统_Web.config在渗透中的作用
  9. 201621123031 《Java程序设计》第13周学习总结
  10. DataGrip 上手体验,真香!
  11. 大一c语言常见编程题,自己整理的C语言常见编程题
  12. 机房工程主要施工方法和机房工程验收
  13. Spring Boot多数据源配置并通过注解实现动态切换数据源
  14. padavan做副路由,主路由是原厂固件,如何使用adguardHome过滤广告
  15. sass安装步骤、概述、基本语法等
  16. spidev0.0的正确打开方式
  17. php银行卡的验证规则,php验证银行卡号码的正确性、规范性
  18. Prometheus源码学习(8) scrape总体流程
  19. 辣评10月自主SUV销量:优胜劣汰开始 哪些产品将死得其所?
  20. 宅男程序员给老婆的计算机课程之5:设计模式

热门文章

  1. Java IO: OutputStream
  2. 【最全最详细】使用publiccms实现动态可维护的首页轮播
  3. java面向对象高级分层实例_数据库操作类
  4. Servlet 参数读取
  5. 并查集判断是否有环存在
  6. charles抓包ios抓拍教程
  7. perform指标分析_performace 监控统计
  8. java 单一职责原则_设计模式之单一职责原则
  9. Mybatis报错:nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found
  10. Spring boot(七):Spring boot+ mybatis 多数据源最简解决方案