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

picocli主页面将picocli描述为“强大的微小命令行界面”,“ picocli”是一个文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助消息。 有颜色。” 这篇文章简要介绍了如何使用Picocli 0.9.7处理Java代码中的命令行参数。

像本系列中介绍的其他基于Java的命令行处理库一样, picolci是开源的 。 由于picocli的所有实现都存在于单个Java源代码文件中 ,因此如果需要,可以直接直接使用源代码。 picocli页面强调了这一点,“ picocli的一个显着特征是它旨在让用户运行基于picocli的应用程序而无需将picocli作为外部依赖项:所有源代码都保存在单个文件中,以鼓励应用程序作者将其包含在其中。源表格 。” 如果您希望将picocli用作库,则Maven信息库中提供了一个JAR,其中包含大量已编译的.class文件(Picocli具有一个Java文件,但具有许多嵌套的类和注释)。

了解Picocli单文件性质的最简单方法是查看该单文件本身。 在Picocli的“下载”页面上可以找到CommandLine.java的Java源代码。 接下来的两个屏幕快照显示了当对CommandLine类执行时,对一个内部注释和一个内部类执行时, javap的一些输出。

无论是将CommandLine.java编译到自己的类/ JAR文件中还是选择使用Maven中的预构建JAR,使用Picocli的应用程序的源代码显然都是相同的。 通过注释实例字段来完成Picocli的“定义”阶段,该实例字段将存储与命令行选项关联的值。 下面的代码段对此进行了演示。

Picocli的“定义”阶段

/*** Demonstrate Java-based command-line processing with picocli.*/
@Command(name="Main",description="Demonstrating picocli",headerHeading="Demonstration Usage:%n%n")
public class Main
{@Option(names={"-v", "--verbose"}, description="Verbose output?")private boolean verbose;@Option(names={"-f", "--file"}, description="Path and name of file", required=true)private String fileName;@Option(names={"-h", "--help"}, description="Display help/usage.", help=true)boolean help;

刚刚显示的代码示例演示了Picocli允许指定选项标志的多个名称(在我的示例中,我指定了单连字符单字符名称和双连字符多字符名称)。 该例子也说明required=true能为所需的选项,指定help=true支持特别可以“帮助”选项来指定具体的帮助,行为,比如打印使用细节,避免与缺乏所需的选项错误。 请注意,Picocli 0.9.8通过versionHelpusageHelp添加了更多特定的帮助类型支持。

“解析”阶段是在Picocli中使用CommandLine.populateCommand(T,String ...)完成的 ,其中T是带有Picocli批注字段的类的实例,其余String是要解析的参数。 下一个代码片段对此进行了演示。

Picocli的“解析”阶段

final Main main = CommandLine.populateCommand(new Main(), arguments);

使用Picocli进行“询问”阶段仅需访问在“分析”阶段中传递给CommandLine.populateCommand(T,String...)方法的实例的Picocli注释字段。 下一个代码清单中描述了这种“询问”的简单示例。

皮科克里的“审讯”阶段

out.println("The provided file path and name is " + main.fileName+ " and verbosity is set to " + main.verbose);

要在命令行上提供-h--help时向用户显示帮助/使用信息,就像“询问”指定为help=true的Picocli注释字段一样简单,以查看是否设置了该布尔值并且,如果已设置,则调用重载的CommandLine.usage方法之一。 我碰巧使用了此方法的static版本之一,如下面的代码清单所示。

Picocli的帮助/使用

if (main.help)
{CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO);
}

接下来的几个屏幕快照演示了实际的基于Picocli的简单处理应用程序。 第一个图像显示了错误消息的类型和堆栈跟踪,当不存在必需的标志时,将显示堆栈跟踪。 第二张图片显示了如何在注释中指定我使用的长名和短名。 第三张图片显示了正在使用的帮助功能。

许多其他基于Java的命令行解析库所不具备的Picocli可选功能之一是颜色语法支持 。 这篇文章中的第一个代码清单显示了一些用@| |@注释定义的字符串@| |@ @| |@语法。 在上面显示“帮助”用法的屏幕快照中,这些字符按原样传递,没有特殊处理。 但是,如果我改为在Cygwin中运行此示例代码,我将看到这些标记的作用。

从上面的屏幕快照中,我们看到Picocli自动将某些颜色语法(黄色和白色)应用于各个选项的帮助,并且还将定制的粗体和带下划线的粗体语法应用于描述@| |@区域@| |@ @| |@语法已应用。

在选择框架或库来帮助使用Java进行命令行解析时,需要考虑Picocli的一些其他特征。

  • Picocli是开源的,并根据Apache License 2.0获得许可 。
  • Picocli不需要下载任何第三方库或框架。
    • Picocli源代码完全包含在一个.java文件中,并且该源代码可以复制并粘贴到自己的配置管理系统中,并与其余应用程序代码一起构建,这意味着甚至Picocli JAR文件也并非绝对必要。
  • CommandLine.java源代码文件(Picocli 0.9.7)不到3700行(包括空白和注释),大小几乎为200 KB。 picocli-0.9.7.jar文件的大小约为83 KB。
  • Picocli得到当前和经常的支持。 它的0.9.8版本已于昨天发布(在我撰写了这篇文章的大部分内容之后)。
  • 与其他几个基于Java的命令行处理库的文档相比, Picocli文档更加详细,并且在许多方面更具现代感。
  • Picocli对颜色语法的支持易于使用,并且在不同平台上对颜色语法的支持已在文档的“ 支持的平台 ”部分下进行了说明。
  • Picocli在实例级字段上使用批注的方式与某些其他基于Java的命令行处理库类似,并且具有相同的优势。
  • Picocli的基本功能非常易于访问且易于快速学习,但是Picocli还支持使用Picocli显着自定义命令行处理的多个方面的功能。

Picocli是当前支持和更新的库,用于处理Java的命令行参数。 它具有其他一些可用的基于Java的命令行处理库的一些较新的功能和方法,并引入了几个不同的功能(颜色语法和整个库封装在单个Java源文件中)。 Picocli易于使用并具有吸引力,但是如果特定的开发人员希望获得颜色语法支持或将源代码文件拖放到开发人员项目中的能力,则该开发人员很可能会将其与其他开发人员分开需要一个JAR或已编译的.class文件。

其他参考

  • Picocli主页
  • Picocli发布
  • Picocli的单个源文件: CommandLine.java
  • Maven上的Picocli
  • GitHub上的Picocli
  • Picocli API文档 (Javadoc)

翻译自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-10-picocli.html

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

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

相关文章

workunit 的指的工作单元是什么_分频器是做什么用的?

由于现在的音箱几乎都采用多单元分频段重放的设计方式,所以必须有一种装置,能够将功放送来的全频带音乐信号按需要划分为高音、低音输出或者高音、中音、低音输出,才能跟相应的喇叭单元连接,分频器就是这样的装置。如果把全频带信…

合并不同gdb下的相同要素_GDB调试学习

简介GDB是GCC的调试工具。其功能如下:启动程序,使程序按自定义形式运行;使程序停止指定断点位置;程序停止后,检查程序执行中的相应情况;动态改变程序执行环境。gdb调试能进行GDB调试,一般在编译…

endnote文献顺序编号不对_把Endnote装进大脑:行走的文献管理者

是否还迷失在茫茫的文献海洋,东翻西找,仍无法获得需要的文献信息?是否还在半手动导入参考文献,费时费力?别着急,文献管理神器-Endnote轻松帮你搞定这些问题。把Endnote“装进”大脑,你就能成为行…

蔡司三坐标_蔡司三坐标测针的安装指南

1、装配和辅助工具合适的辅助工具可以在组装测针组时有效防止各部件的损坏,确保安装的安全进行。下面是几种最重要的装配和辅助工具。2、正确调整MT/VAST吸盘MT/VAST吸盘可以通过顶部的三个螺丝进行旋转调节。必须使用不超过2Nm的扭力紧固,为了防止螺丝的…

三电平igbt死区时间计算_IGBT基础与运用-2

IGBT基础与运用-1尝试去计算IGBT的开启过程,主要是时间和门电阻的散热情况。C.GE 栅极-发射极电容C.CE 集电极-发射极电容C.GC 门级-集电极电容(米勒电容)Cies CGE CGC 输入电容Cres CGC 反向电容Coes CGC CCE 输出电容根据充电的详细过程,可以下图…

在2017年从Maven工件生成P2存储库

几年前,我写了一篇博客文章,介绍如何基于Maven工件生成P2存储库。 如今,这种描述的方法已经过时了,我想展示一种基于p2-maven-plugin的新方法,该方法是为解决该问题而创建的。 Maven构建生命周期中的P2-Maven-Plugin集…

循环次数几次_圆柱模板循环使用次数是多少呢

对于同一处做同样的工程,如果需要使用的是圆柱模板,用户一定考虑到底该进多少货,备多少料(圆柱模板)呢?这就需要考虑到圆柱模板循环使用次数和错开的程度来进行决定的?建筑圆柱模板能周转几次?这可能是所有…

network 拦截不到东西是怎么做到的?_都说读中职院校学不到东西,中职学生到底是怎么学习的?...

中职院校在社会中的影响一直并不是很好,一直都是负面影响高于正面影响,那么,我们不禁就要问了,一直在喊提升中职院校的教学质量,质量提升到哪里去了呢!那些中职院校里的学生到底又是怎么学习的呢&#xff1…

数组中查找並返回数组_java数组查找常见情况

一.最简单的查找元素方法(依次比较):给一个数组,在数组里面查找某个元素在数组中的位置,并返回它的位置。public static void main(String[] args) {int arr[] new int[]{12, 4, 54, 57, 87, 3, 41, 1, 3, 4, 1, 3, 4…

阿帕奇跨域_阿帕奇骆驼遇见Redis

阿帕奇跨域键值商店的兰博基尼 Camel是最好的面包集成框架,在本文中,我将向您展示如何通过利用另一个出色的项目Redis使它更加强大。 Camel 2.11即将发布,具有许多新功能,错误修复和组件。 这些新组件中的几个是我创作的&#…

误码率越高越好还是越低越好_ISO永远都是越低越好?不一定!这些情况下要用高 ISO!...

关于摄影中的参数,在说到 ISO(感光度)的时候,大家脑海中肯定都会想到那句摄影中的定律——“使用尽可能低的 ISO ”,这是为什么呢?通过下面这张典型的高 ISO 照片我们能知道原因在图片里,那些不自然的、充斥整个画面的…

如何在Java 8中创建线程安全的ConcurrentHashSet?

在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet。 java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类,但是从JDK 8开始,您可以使用新添加的keySet(默认值)和newKeySet(…

删除 多个表_合并汇总多个工作簿多个工作表,删除修改新增更新内容只需刷新...

要求:1、把多个工作簿的多个工作表内容合并汇总2、后续在任一工作表内删除修改新增内容,无需再重新做表3、后续在任一工作簿中新增一个或多个工作表,无需再重新做表4、后续在文件夹中添加一个或多个Excel工作簿文件,无需再重新做表…

OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章: 不要太相信我要说的话。 我之所以这样说,是因为我们正在讨论安全性。 而且, 当您谈论安全性时,除了100%正确的陈述外,还有冒任何其他风险的风险…

人工智能在建筑运营_打造智能建筑商

人工智能在建筑运营构建API时,您应始终考虑谁将使用它。 当API简单易用时,用户就会感到满意。 当用户满意时,每个人也都会满意。 但是出色的可用性并非总是容易实现的。 有一些模式对此有所帮助,在这篇文章中,我将重点…

alinq mysql_ALinq让Mysql变得如此简单_MySQL

当大家已经习惯了使用.net 去操作SQL Server,有多少人曾经尝试过使用.net 去操作Mysql数据库!在.net 的光环下,Mysql是显得如此微不足道!但是Mysql的开源又是如此具有诱惑。1. ADO.NET 方式连接Mysql数据库经过在网上查找资料&…

debian php mysql 安装_在 Debian 下安装 Apache,MySQL,PHP

我是转载过来的,原地址 http://blog.csdn.net/youngdze/article/details/20455557 ,我安装成功!首先,对你的源进行更新:$ sudo apt-get update第一步--安装 ApacheApache 是一个开源软件,它目前运行在全球超过 50% 的服务器上&…

java ee cdi_Java EE CDI bean范围

java ee cdiJava EE平台的上下文和依赖注入(CDI)是一项功能,有助于将Java EE平台的Web层和事务层绑定在一起。 CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术。…

airflow mysql_Airflow 使用及原理分析

Airflow 入门及使用什么是 Airflow?Airflow 是一个使用 Python 语言编写的 Data Pipeline 调度和监控工作流的平台。Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具,不需要知道业务数据的具体内容,设置…

wps怎么旋转页面_用WPS文字编辑一份试卷,详细教程来了,老师们赶快收藏吧

​ 试卷是每一个教师接触最多的资料了,很多教师在检测前找一些现成的试卷复印给学生练习,但是,有很多题不适合学生,因此,我们需要自己编辑一份试卷了,编辑试卷也并不是很难的,今天,就…