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

本系列中有关使用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

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

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

相关文章

view如何接受json_如何将你的 ThinkJS 项目部署到 ZEIT 上

编者按&#xff1a;本文作者奇舞团前端开发工程师李喆明。什么是 ZEITZEIT(https://zeit.co) 是免费的云平台&#xff0c;支持部署静态网站以及 Serverless 函数。Serverless 是近几年比较火的概念&#xff0c;简单去理解就是你只需要去实现具体的业务逻辑&#xff0c;而与最终…

Spring MVC和REST中@RestController和@Controller注释之间的区别

Spring MVC中的RestController注释不过是Controller和ResponseBody注释的组合。 它已添加到Spring 4.0中&#xff0c;以简化在Spring框架中RESTful Web Services的开发。 如果您熟悉REST Web服务&#xff0c;您就会知道Web应用程序与REST API之间的根本区别在于&#xff0c;Web…

java patriciatrie_明明白白以太坊Merkle Patricia Trie

在以太坊数据结构中&#xff0c;Merkle Patricia Trie始终是个绕不过去的坎&#xff0c;世界状态&#xff0c;交易&#xff0c;交易收据等都是以这种树的形式存储在区块链数据库中&#xff0c;并将树root hash保存在区块头里。可以说不弄懂这种树的原理就没有办法真正明白以太坊…

jdeveloper_适用于JDeveloper 11gR2的Glassfish插件

jdeveloper众所周知&#xff0c; ADF Essentials是使用Java构建Web应用程序的绝佳框架&#xff0c;它可以自由开发和部署。 您在Glassfish&#xff08;3.1&#xff09;服务器上部署ADF Essentials应用程序。 但是&#xff0c;JDeveloper并不带有嵌入式Glassfish服务器&#xff…

Spring Cloud教程– Spring Cloud Config Server简介

问题 SpringBoot在通过属性或YAML文件外部化配置属性方面提供了很大的灵活性。 我们还可以使用特定于配置文件的配置文件&#xff08;例如application.properties &#xff0c; application-dev.properties &#xff0c; application-prod.properties等&#xff09;分别为每个环…

数字孪生体技术白皮书_基于Flownex的数字孪生体解决方案 系列介绍之二:数据中心应用实例...

致力于数字孪生体技术的研究与发展通过解决方案和工程化应用造福人类来源&#xff1a;数字孪生体实验室原创作者&#xff1a;王永康转载请注明来源和出处导 读《基于Flownex的数字孪生体解决方案》是我们最近完成的系列落地方案之一。该方案适用于热力系统、冷却系统、通风空调…

node php聊天室,最简单的Nodejs聊天室示例

今天群里一个同学找我要一个nodejs聊天室的demo。给他了一个简单的例子&#xff0c;顺便记录下&#xff1a;准备工作(前提是已经装好了nodejs)&#xff1a;mkdir nodejs-democd nodejs-demo安装express : npm install express安装socket.io : npm install socket.io安装foreve…

neo4j安装_neo4j 社区版win10 下安装

准备工作&#xff1a;Neo4j下载网址&#xff1a;https://neo4j.com/download-center/#releasesava jdk官网下载&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/index.html安装 查看是否有用旧版本的java jdk ,如果有请在设置“应用和功能”卸载 旧的ja…

php网站 qq登陆,php写的插件网站接入QQ登录,QQ互联

qq按钮这里的链接是入口&#xff0c;调用你的apiapi_qq.php前端直接链接到此/*** 这个QQ登录简单实用&#xff0c;只要大家看我写的注释会一目了然&#xff0c;请注意看哦。* 带有"todo"这样注释的地方都是要你去改成你自己的逻辑* 这个php怎么进来呢&#xff1f;这是…

Spring MVC中@RequestParam和@PathVariable批注之间的区别?

Spring MVC框架是在Java世界中开发Web应用程序最流行的框架之一&#xff0c;它还提供了一些有用的注释&#xff0c;可以从传入的请求中提取数据并将请求映射到控制器&#xff0c;例如 RequestMapping&#xff0c; RequestParam和PathVariable。 即使将RequestParam和ParthVari…

excel 两列模糊匹配给出结果_北大硕士给大脑植入Excel病毒,工作效率提升了好几倍...

在工作中&#xff0c;我们经常会碰到这样的同事&#xff0c;他们是这样完成工作的&#xff1a;先用计算器算好结果&#xff0c;甚者动用手指头在电脑屏幕上数数&#xff0c;然后把数据填写到Excel表格中。结果可以预见&#xff0c;原本可以在上班时间完成的工作&#xff0c;愣是…

java ee cdi_Java EE CDI Producer方法教程

java ee cdi这是CDI Producer方法的教程。 在CDI中&#xff0c;生产者方法生成一个对象&#xff0c;然后可以将其注入。 当我们要注入本身不是bean的对象&#xff0c;要注入的对象的具体类型在运行时可能有所不同&#xff0c;或者当对象需要一些bean构造函数不执行的自定义初始…

qnap nas web php,如何在QNAP NAS上建立并使用 iSCSI Target

本帖最后由 小Q 于 2015-2-5 13:30 编辑在QNAP Turbo NAS上建立并使用iSCSI Target&#xff0c;快速、便利且便宜建置网络储存系统之方式内容&#xff1a;l 在Windows中使用Microsoft iSCSI启动器来连接iSCSI装置什么是iSCSI且它有什么好处?iSCSI(Internet Small Computer Sy…

openssl php api,PHP7使用openssl解密易班API中的用户数据

PHP7使用openssl解密易班API中的用户数据一、mcrypt扩展解密自从PHP版本更新到了7.1以上以后&#xff0c;mcrypt扩展被废弃&#xff0c;使用mcrypt扩展会出现如下图的报错。只能使用openssl来代替。然而易班轻应用提供的还是旧版本的mcrypt扩展&#xff0c;这将导致php版本升级…

Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事

如果您使用过Spring MVC&#xff0c;那么您应该知道什么是DispatcherServlet&#xff1f; 它实际上是Spring MVC的心脏&#xff0c;确切地说是MVC设计模式或控制器的C语言。 应该由Spring MVC处理的每个Web请求都通过DispatcherServlet处理。 通常&#xff0c;它是Front Contro…

运行时错误7内存溢出_分别从运行时和GC的角度看JAVA8内存管理

运行时区域1.程序计数器程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里&#xff08;概念模型&#xff0c;各种虚拟机可能会通过一些更高效的方式实现&#…

极域课堂管理系统软件如何取消控制_微缔电子组装业MES系统软件六大功能组成...

电子组装业MES系统软件六大功能组成MES系统软件是制造执行系统的英文简称&#xff0c;MES系统软件在整个企业信息集成系统中承上启下&#xff0c;是生产活动与管理活动信息沟通的桥梁&#xff0c;MES系统软件在产品从工单下发到生产成成品的整个过程中&#xff0c;扮演着促进生…

多个cuda 被单进程沾满_报名 | 提高GPU利用率,听英伟达专家分享这个CUDA工具

随着 NVIDIA GPU 计算性能的不断提升&#xff0c;如何提升 GPU 利用率是开发者普遍关心的问题之一。从 Kepler 架构开始&#xff0c;NVIDIA GPU 支持多个 CUDA kernels 函数的并发执行&#xff0c;称为 Hyper-Q 技术。Hyper-Q 技术支持多个 CUDA streams、多个 CPU threads 或者…

usb转ttl模块与matlab,USB接口转TTL小板的自检测试

现在电脑基本上都不会配置DB9串行数据端口了&#xff0c;这给一些喜欢折腾刷机和单片机加载程序的朋友带来了诸多的不便。还好&#xff0c;随着技术的发展&#xff0c;USB接口转TTL的产品越来越成熟&#xff0c;而这种产品主要以采用PL-2303HX芯片作为主控器的居多&#xff0c;…

matlab 误差椭圆,求3倍标准差误差椭圆分析的程序

根据《白话空间统计之九&#xff1a;方向分布(标准差椭圆)修正版》(有些地方没有理解清楚)&#xff0c;写了下面的程序。但是好像结果不对Zmvnrnd([0.5 1.5], [0.025 0.03 ; 0.03 0.16], 50);XZ(:,1); YZ(:,2);mean_Xnanmean(X); mean_Ynanmean(Y); %椭圆圆心%确定长短半轴…