大家好!
Java开发人员小组的下一个起点,我们所有人都将继续进行以下事实的实验:学习过程不必是连续的(“争议应该是连续的吗?”)。 也就是说,我们对程序进行了稍微的修改和改组,将其分为三个步骤,可以轻松地通过它们之间的一个中断。 总的来说,对学生和我们来说,这都是很有趣的,如果没有人潮湿,那么该程序甚至看起来会有些复杂,尽管在那之前并不容易。 好吧,一篇与我们的课程有关的传统有趣的文章。
走吧

在
官方网站上, picocli被描述为“一个功能强大的小命令行界面”,“它是一个用于解析命令行参数并创建完美,易于定制的帮助程序消息的单文件Java框架。 有花。 这篇文章
简要概述了Picocli 0.9.7及其在Java代码中解析命令行参数的用法。
像本系列中描述的其他Java命令行处理库一样,
picocli是开源的 。 由于所有picocli都在单个
Java文件中实现 ,因此您可以根据需要轻松地直接直接使用源代码。 picocli网站强调:“ picocli的独特之处在于,它使用户可以运行使用picocli的应用程序,而无需picocli本身作为外部依赖项:所有源代码都位于一个文件中,以鼓励应用程序作者将其包含在程序源代码中”如果你喜欢使用picocli作为一个库,在Maven仓库有一个
JAR文件与设置编译的.class文件(picocli代表一个Java的文件,但包含众多子类和注释 S)。
了解Picocli的单文件性质的最简单方法是查看文件本身。
Picocli下载
页面上提供了CommandLine.java的源代码。 以下两个屏幕快照显示了执行CommandLine类以及执行其内部注释之一和其内部类之一时
javap的输出。


无论我们是将CommandLine.java编译到我们自己的类/ JAR文件中,还是使用已经从Maven构建的JAR,使用Picocli的应用程序的源代码显然都是相同的。 使用Picocli解析参数的“确定”阶段是通过注释实例的字段来完成的,该实例的字段将存储与命令行参数关联的值。 这显示在下面的代码片段中。
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为更特定的帮助程序消息类型
versionHelp和
usageHelp添加了附加支持。
Picocli中的“解析”阶段在
CommandLine.populateCommand(T,String ...)中执行 ,其中T是带有Picocli注释字段的类的实例,其余行是需要分析的参数。 在下面的代码片段中显示了这一点。
Picocli解析阶段 final Main main = CommandLine.populateCommand(new Main(), arguments);
Picocli中的“轮询”阶段包括仅访问在“解析”阶段传递给CommandLine.populateCommand(T,String ...)方法的实例的Picocli注释字段。 下面的清单中显示了这种“调查”的一个简单示例。
Picocli调查阶段 out.println( "The provided file path and name is " + main.fileName + " and verbosity is set to " + main.verbose);
在命令行上指定-h或--help时,向用户显示辅助消息或使用情况信息非常简单,就像“轮询”一个Picocli注释的字段,为该字段指定了help = true来确定是否设置了此布尔值是否安装,并调用重载的CommandLine.usage方法之一(如果已安装)。 我必须使用此方法的静态版本之一,如下面的清单所示。
Picocli中的支持消息/使用信息 if (main.help) { CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO); }
以下几个屏幕快照演示了一个使用picocli编写的简单应用程序。 第一个屏幕截图显示了错误消息的类型和堆栈跟踪(如果缺少所需的标志)。 第二张屏幕截图显示了如何使用注释中指定的长名和短名。 第三幅图显示了在操作中显示辅助消息的功能。



Picocli的其他功能之一是对
颜色语法 a的支持,这是许多其他Java命令行参数解析库中没有的功能。 这篇文章的第一个清单中的行在注释中用@ |定义。 | @语法。 在上面的屏幕快照(演示了辅助消息的用法)中,这些字符按原样发送,而无需特殊处理。 但是,如果我在Cygwin中运行此示例代码,我将看到这些标志的作用。

在上面的屏幕截图中,我们看到Picocli自动将颜色语法(黄色和白色)应用于辅助消息选项,还将粗体和带下划线的粗体语法应用于具有辅助消息描述的区域,其中使用了@ |语法 | @。
以下是选择框架或库以帮助解析Java中的命令行参数时要考虑的其他Picocli功能。
- Picocli是Apache 2.0许可的开源项目。
- Picocli不需要下载第三方库或框架。
- 所有Picocli源代码都包含在一个.java文件中,并且可以将该代码复制并粘贴到其自己的配置管理系统中,并与其余应用程序代码一起编译,这意味着甚至Picocli JAR文件也不需要。
- CommandLine.java源文件(Picocli 0.9.7)仅超过3,700行(包括空格和注释),重约200 KB。 picocli-0.9.7.jar文件重约83 KB。
- Picocli及时且经常更新。 昨天发布了0.9.8版(在我撰写了这篇文章的大部分内容之后)。
- Picocli具有非常详细的文档 ,并且在许多方面都比其他Java命令行处理库的文档更新。
- Picocli的颜色语法支持易于使用,并且在“ 支持的平台”部分中记录了跨平台使用颜色语法的帮助。
- 对实例级字段使用Picocli注释与在其他某些命令行处理库中使用注释相似,并且具有相同的好处。
- Picocli的主要功能非常方便且易于学习,但是Picocli还支持使用Picocli配置命令行处理的多个方面的功能。
这篇文章中的清单在
GitHub上完全可用。
Picocli是一个受支持的更新库,用于解析Java命令行参数。 它包含其他一些用Java编写的可用命令行处理库中的新功能和新方法,但已添加了几个不同的功能(例如颜色语法和封装在单个Java源文件中的整个库)。 Picocli易于使用且本身很吸引人,但如果该开发人员希望支持颜色语法或能够将源代码文件添加到开发人员项目中而无需其他JAR文件或已编译的文件,则它很可能会在其他库中脱颖而出。类文件。
结束
与往常一样,我们正在等待您的问题和评论。