cli命令行界面 demo_Java命令行界面(第24部分):MarkUtils-CLI

cli命令行界面 demo

本系列的第一篇 有关使用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

cli命令行界面 demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python打包成exe_【Python基础】一篇文件教你py文件打包成exe

场景:如果要将我们编写好的代码给别人使用,如果要他们直接使用我们的代码,就需要安装各种编译软件以及第三方模块,还要对软件操作,编程有一定的了解,这对使用者的要求比较高,不是很方便,为了解决这一问题,我们可以选择将我们编写的代码,编译成一个可执行文件,这样,就可以实现跨…

cad图标注释大全_CAD源泉插件快捷键使用教程(全集)

点击直达全集教程地址​www.bilibili.com此插件和海龙工具箱功能相似&#xff01;不建议同时安装&#xff0c;快捷命令冲突。插件工具箱 图文介绍平面空间布置 jj这个命令把我们常规用到的家装空间都已经用上了&#xff0c;除了切换不同空间布置格局&#xff0c;而且图块的样式…

苹果录屏功能没有声音_其实苹果手机也有录屏功能!简单操作几步,就能轻松开启...

现在手机中的娱乐方式越来越多了&#xff0c;大家遇到有趣的事情就想分享给朋友&#xff0c;但是一些视频不能直接分享链接&#xff0c;还是挺麻烦的。不过我们可以通过录屏的方式来进行分享的&#xff0c;其实苹果手机就自带录屏工具&#xff0c;简单操作几步&#xff0c;就能…

natty的异步通信框架_OpenHub框架进行的异步通信

natty的异步通信框架在本系列的前一部分中&#xff0c;我们介绍了OpenHub框架 。 这部分显示了框架最强大的功能之一- 异步消息传递模型 。 当源系统无法等待目标系统的响应时&#xff0c;将使用系统之间的异步通信。 有以下几个原因&#xff1a; 源系统必须尽可能地响应 &am…

java大文件解析_java大文件(百M以上)的上传下载实例解析

javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求&#xff0c;也可以使用 ajax向后端发请求1.通过form表单向后端发送请求Save改进后的代码不需要form标签&#xff0c;直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了…

zip直链生成网站_安装网站程序

一、选择网站程序搭建网站的程序有很多博客类&#xff1a; WordPress、 Typecho 、Hexo 等商城类&#xff1a;EcShop、DBShop、NiuShop 等论坛类&#xff1a;Discuz 还有 苹果CMS-影视建站&#xff1b;Tipask-问答程序&#xff1b;可道云KodExplorer-强大易用的私有云/在线文档…

mega x_[MEGA DEAL]通过Hadoop Bundle掌握大数据(91%的折扣)

mega x通过44个小时的广泛Hadoop培训来驯服海量数据集 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了另一个超值优惠 。 通过Hadoop Bundle&#xff0c;我们可以提供91&#xff05;的 大数据精通 折扣 。 现在只需39美元…

c++ 提取傅里叶描述子_AI大语音(四)——MFCC特征提取(深度解析)

1 特征提取流程在语音识别和话者识别方面&#xff0c;最常用到的语音特征就是梅尔倒谱系数&#xff08;Mel-scaleFrequency Cepstral Coefficients&#xff0c;简称MFCC&#xff09;。MFCC提取过程包括预处理、快速傅里叶变换、Mei滤波器组、对数运算、离散余弦变换、动态特征提…

Linux 命令之 grep -- 强大的文本搜索工具/正则表达式搜索

文章目录一、命令介绍二、grep 的三种形式三、常用选项四、正则表达式五、参考示例在指定的文件中查找指定的关键词查看指定文件中含有特定关键词的文本行查看指定文件中所有包含数字的行在指定的目录下递归搜索指定的字符串&#xff0c;将符合的文本行及其文件名输出在指定文件…

java me基础教程 pdf_Java ME手机应用开发技术与案例详解 PDF

资源名称&#xff1a;Java ME手机应用开发技术与案例详解 PDFJava ME手机应用开发技术与案例详解基于Java ME&#xff0c;系统描述了Java ME手机应用开发的各个方面。全书按照Java ME程序的开发流程合理编排内容&#xff0c;分成3个部分依次讲述。第1部分包括第1章-第5章&#…

cli parser_Java命令行界面(第27部分):cli-parser

cli parserCLI Parser最初托管在Google Code上&#xff0c;现在已存档在Google Code上 &#xff0c;现在可以在GitHub上使用 。 Google Code项目档案页面将CLI Parser描述为“使用非常简单&#xff0c;非常小的依赖项”&#xff0c;它使用注释“使非常简洁的主要方法不需要知道…

写一个sql实现以下查询结果_书写高质量SQL的30条建议

以下文章来源&#xff1a;后端程序员必备&#xff1a;书写高质量SQL的30条建议1、查询SQL尽量不要使用select *&#xff0c;而是select具体字段。反例子&#xff1a;select * from employee;正例子&#xff1a;select id&#xff0c;name from employee;理由&#xff1a;只取需…

sendkeys.send 始终输出英文._PLC的三种输出方式,你知道有哪些吗?

电工技术维修学习网&#xff1a;www.dgjswx.com关注电工技术维修学习网官方微信公众号《电工维修学习》收获更多电工经验知识和提升实战技能电工技术&#xff0c;电气知识&#xff0c;电工基础知识&#xff0c;电工入门知识&#xff0c;电工资料&#xff0c;电工软件&#xff0…

java 死循环排查_java应用死循环排查方法或查找程序消耗资源的线程方法(面试)...

今天遇到一个面试&#xff0c;怎么在一堆线程中查找一个死循环&#xff1f;如果遇到线上应用cpu飙升&#xff0c;并出现OutOfMemery怎么办&#xff1f;首先线上应用的jvm配置要养成良好的习惯&#xff0c;增加一下配置则可以在jvm发生 oom的时候自动dump日志了 -XX:HeapDumpOn…

jw摄像_Java命令行界面(第17部分):jw-options

jw摄像JavaWorld的文章“ 用Java处理命令行参数”&#xff1a; Matthias Laux博士关闭的案例介绍了一个简单的基于Java的库&#xff0c;用于处理命令行参数 &#xff0c;我在本文中将其称为jw-options 。 被引用的文章提供了有关为何在构造Options类时做出某些设计决策的背景信…

pixel和毫米怎么换算_压力传感器相关压力单位换算

压力传感器的应用已经很普遍了&#xff0c;压力传感器各个单间之间应该怎么换算呢&#xff0c;这个问题困扰着很多的客户&#xff0c;今天呢我们就来说一下它们之间的换算。在实际的工程应用中&#xff0c;压强单位常被当作压力单位。比较常见的压力单位包括&#xff1a;bar、K…

mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用

mongodb json总览 为什么将XML转换为JSON以在MongoDB中原始使用&#xff1f; 由于MongoDB使用JSON文档存储记录&#xff0c;就像表和行将记录存储在关系数据库中一样&#xff0c;我们自然需要将XML转换为JSON。 某些应用程序可能需要存储原始&#xff08;未修改的&#xff09;…

java串口发送16进制数据_MFC串口通信发送16进制数据的方法

本文实例为大家分享了MFC串口通信发送16进制数据的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下MFC串口通信会使用m_mscomm控件。发送数据一般是在edit control 里输入自己想发送的内容&#xff0c;然后点击send button。如果直接发送字符串内容&#xff0c;通过下…

python集合和字典的区别_Python中的字典和集合

导语&#xff1a;本文章记录了本人在学习Python基础之数据结构篇的重点知识及个人心得&#xff0c;打算入门Python的朋友们可以来一起学习并交流。 本文重点&#xff1a; 1、掌握常见的字典创建&#xff0c;查询&#xff0c;判别方法&#xff1b; 2、了解字典中的defaultdict、…

apache ignite_Apache Ignite本机持久性,简要概述

apache ignite通过将数据的工作集放入系统内存中&#xff0c;内存中方法可以达到极高的速度。 当所有数据都保存在内存中后&#xff0c;就不再需要处理使用传统旋转磁盘引起的问题。 例如&#xff0c;这意味着无需维护数据的其他缓存副本并管理它们之间的同步。 但是这种方法还…