Java命令行界面(第21部分):航空公司2

本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2的GitHub项目页面描述了该库,“ Airline是一个Java库,提供了基于注释的框架来解析命令行界面。” 该页面进入状态:航空公司“既支持简单的单个命令,也支持具有组的复杂git样式的界面。” 页面还限定航空公司2的配合关系原始航空公司库 :“这是一个基本上改写叉原始航空公司库 ”。 这篇文章特别介绍了航空公司2.3.0 。

这篇文章中的示例将与本系列之前的文章中的示例类似,这些替代类库用于解析Java的命令行参数。 这样,这些示例中支持的选项将是文件路径和名称的规范,以及是否应启用冗长性的规范。 此处显示的示例的完整代码列表可在GitHub上找到。

使用@Option批注很容易完成从Java与Airline 2解析Java命令行参数的“定义”阶段,如下面的代码清单所示。

航空公司2的“定义”阶段

@Option(title="file", name={"-f", "--file"}, description="Path and name of file.")
private String file;@Option(title="verbose", name={"-v", "--verbose"}, description="Enable or disable verbosity.")
private boolean verbose;

@Option注释的这些实例的代码是不言自明的。 @Option批注的“ name ”元素需要一个或多个String ,因此允许为同一选项指定多个标志。 在这种情况下,我为选项使用了相同的单连字符/单字符“短”形式和双连字符/单词“长”形式。

“解析”阶段可以通过航空公司2使用SingleCommand类及其静态singleCommand(Class <C>)方法来获取SingleCommand实例,然后在该实例上调用parse(String [])方法来完成。 在下面的代码清单中将演示这两个语句。

航空公司2的“解析”阶段

final SingleCommand<Main> parser = SingleCommand.singleCommand(Main.class);
final Main main = parser.parse(arguments);

只需通过访问SingleCommand.parse(String[])方法提供的实例的@Option字段,即可完成航空公司2的“询问”阶段。 下一个代码清单对此进行了演示。

航空公司2的“审讯”阶段

if (main.file != null)
{out.println("File path/name is '" + main.file + "'.");out.println("Verbosity is " + main.verbose);
}
else
{out.println("ERROR: File path/name must be provided with -f or --file.");
}

接下来的两个屏幕快照显示了实际的示例。 当没有提供任何参数时,第一个屏幕快照显示输出,第二个图像显示“正常”使用两个选项的长和短版本来指定文件路径/名称和详细程度。

航空公司支持生成使用和帮助信息。 不幸的是,我无法使用它,因为遇到了一个编译错误,指出“找不到com.github.rvesse.airline.io.printers.UsagePrinter的类文件。” 我下载airline-2.3.0.jar没有看到该类。

选择框架或库来帮助Java进行命令行解析时,需要考虑Airline 2的特性。

  • 航空公司2是开源的,并根据Apache许可2.0版获得许可 。
  • 航空公司2是本系列中“ 较重 ”的库之一, air-2.3.0.jar的大小约为316 KB,并且对Apache Commons Collections , Apache Commons Lang和javax.inject / javax.inject具有运行时依赖性。 。
  • 尽管航空公司已经存在了一段时间,但航空公司2是该项目的最新更新。
  • Airline 2基本用法的文档非常直接且有用,但是本文中未显示的许多功能的文档仍在构建中,包含许多“ TODO”语句。

对于这些帖子中我的示例中实现的参数处理的“单个命令”风格, Airline 2易于使用。 我没有看到用于表达是否需要某个选项的任何方法,但是简单地在继续之前检查所需选项的null是一种简单的方法。 鉴于其规模和依赖性,Airline 2可能最适合希望使用其本文未演示的许多强大功能的用户。 对于本博文和本系列其他博文中演示的简单示例,在表示“定义”,“解析”和“审讯”阶段方面,有一些轻量级的库,它们具有更少的依赖项,它们与Airline 2的工作原理非常相似。

其他参考

  • 航空公司2 (GitHub)
  • 航空公司用户指南
  • 航空公司2.3.0 (Maven存储库)
  • Airline 2.3.0 API文档 (Javadoc)
  • 原始航空公司

翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-21-airline-2.html

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

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

相关文章

android中进度条的使用,android的进度条使用

android的进度条1、实现的效果2、布局代码先写一个my_browser.xml文件 存放WebViewandroid:layout_width"fill_parent"android:layout_height"fill_parent"android:orientation"vertical" >android:id"id/webView"android:layout_w…

taro 重新加载小程序_Taro开发微信小程序的初体验

了解Taro听说Taro是从几个星期前开始的&#xff0c;在一次饭桌上&#xff0c;一个小伙伴说&#xff1a;“Hey&#xff0c; 你听说了Taro么&#xff0c;听说只需要写一套程序就可以生成H5&#xff0c;小程序以及RN的代码模板&#xff0c;并且类似于React的语法。”“哦&#xff…

应用服务器web服务器_最受欢迎的应用服务器

应用服务器web服务器这是本系列的第二篇文章&#xff0c;我们将发布有关Java安装的统计数据。 使用的数据集来自免费的Plumbr安装&#xff0c;在过去六个月中&#xff0c;我们总共收集了1,024个不同的环境。 该系列的第一篇文章分析了基础-运行JVM的操作系统&#xff0c;是32位…

python 类中定义列表_Python-从类定义中的列表理解访问类变量

小编典典类范围和列表&#xff0c;集合或字典的理解以及生成器表达式不混合。为什么&#xff1b;或者&#xff0c;官方用词在Python 3中&#xff0c;为列表理解赋予了它们自己的适当范围(本地名称空间)&#xff0c;以防止其局部变量渗入周围的范围内(即使在理解范围之后&#x…

mvc html 生成图片,asp.net mvc5 cs代码中获取视图生成后的HTML

public static class ViewExtensions { /// /// 在控制器内获取指定视图生成后的HTML /// /// 当前控制器的上下文 /// 视图名称 /// 视图所需要的参数 /// 视图生成的HTML public static string GetViewHtml(this ControllerContext context, string viewName, Object param) …

如何在Java 8中将Lambda表达式转换为方法引用?

如果您使用Java 8进行编码&#xff0c;那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性&#xff0c;因此建议尽可能使用方法引用替换lambda表达式&#xff0c;但是&#xff0c;最大的问题是&#xff0c;您如何查找是否可以用方法引用替换lambda&#xff1f; 是…

最大化窗口设置_打开表格总是默认窗口最小化?适用Word、PPT等其他应用

今天有小哥哥说每天早上上班打开第一个表格时&#xff0c;这样显示&#xff1b;打开第二个表时是这样显示&#xff1b;每次打开第二个表后点最大化再打开其他的表才正常显示为最大化的状态。其实&#xff0c;这只是表格的默认打开方式改变了&#xff0c;我们改正过来就好了。在…

html5块元素代码,html5 区块与内联div 与span html块级元素(示例代码)

HTML 和 可以通过 和 将 HTML 元素组合起来。HTML 块元素大多数 HTML 元素被定义为块级元素或内联元素。编者注&#xff1a;"块级元素"译为 block level element&#xff0c;"内联元素"译为 inline element。块级元素在浏览器显示时&#xff0c;通常会以新…

js 加总数组中某一列_JS数组求和的常用方法实例小结

本文实例总结了JS数组求和的常用方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;js数组求和的方法var array [1, 2, 3, 4, 5];var sum 0;1.for循环for (let i 0; i < array.length; i) {sum array[i];}console.log(sum)运行结果sum为 15&#xff0c;如下图…

html页面js遍历listview,javascript实现的listview效果

javascript实现的listview效果更新时间&#xff1a;2007年04月28日 00:00:00 作者&#xff1a;#oContainer {width: 600px;height: 500px;border: 1px solid menu;margin: 0px;padding: 0px;overflow: hidden;}a {color: black;text-decoration: none;}a:hover {color: red;t…

华南x79主板u盘装系统教程_华南x99主板装win7系统及BIOS设置教程

[文章导读]最近有小伙伴问我华南x99主板能装win7吗&#xff1f;华南x99主板可以安装win7&#xff0c;但安装win7过程中有很多问题&#xff0c;要采用win7新机型安装&#xff0c;且要在BIOS中关闭“安全启动”和开启"兼容模式"选择&#xff0c;如果是NVME接口的固态硬…

html按钮返回上一步操作,用js实现返回上一步操作

按钮式&#xff1a;onClick"location.hrefhttp://www.ddhbb.com/">链接式&#xff1a;href"javascript:history.go(-1)">返回上一步href"">返回上一步直接跳转式&#xff1a;开新窗口&#xff1a;onClick"window.open(http://www.…

Apache Ignite本机持久性,简要概述

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

cheetah的中文_cheetah是什么意思_cheetah的翻译_音标_读音_用法_例句_爱词霸在线词典...

全部非洲猎豹One economist talks hopefully of the " cheetah generation " taking over from the " hippos ".有一位经济学者满怀希望地讲道,肯尼亚的年轻人是征服了 “ 河马一族 ” 的 “ 猎豹一代 ”.期刊摘选The fastest animal on land is the cheet…

计算机减法英语,英语加减乘除的表达

1. 加: “一加二等于三”可以这样表达One plus two is three.One plus two makes three.One plus two equals three.One and two are three.One and two make three.One and two equal three.2. 减: “八减四等于四” 可以这样表达Eight minus four is four.Eight minus four m…

Java命令行界面(第23部分):Rop

Rop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出&#xff1a;“ Rop的设计目的是最小化同时方便&#xff0c;并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中第23篇有关解析Java命令行参数的文章 &#xff0c;重点是Rop。 …

80端口请求太多超时 php_apmserver 80端口老是被占用问题解决

apmserver 80端口老是被占用问题解决1、在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等.这里主要是用到windows下的DOS工具,点击”开始”–“运行”,输入”cmd”后点击确定按钮,进入DOS窗口,接下来分别运行以下命令:>netstat -aon | findstr “80”Proto…

计算机网络计技术段标 实训,计算机网络技术实训报告精选.pdf

计算机网络技术实训报告精选《计算机网络技术》实训报告专 业 计算机应用技术专 业 计算机应用技术专专 业业 计计算算机机应应用用技技术术系 别 电子信息工程系系 别 电子信息工程系系系 别别 电电子子信信息息工工程程系系课 程 计算机网络技术课 程 计算机网络技术课课 程程…

mysql 定义年龄属性_sql中定义年龄用什么数据类型,长度为多少?

展开全部sql中定义年龄可以用的用数据类型及长度&#xff1a;1、char(3) &#xff1a;长度为3的字符串。小于10位且62616964757a686964616fe59b9ee7ad9431333431373865长度基本固定的字符串用char。2、varchar(3)&#xff1a;长度为3的字符串。长度大于10的用varchar&#xff0…

Java 9,Jigsaw,JPMS和模块:个人探索

Java 9由于Jigsaw项目而延迟了很多次&#xff0c;您可能会听到很多关于模块&#xff0c;模块化和其他内容的信息&#xff0c;那么&#xff0c;它的全部含义是什么&#xff1f; 模块化到底是什么&#xff0c;模块化平台是什么意思&#xff1f; Java平台模块系统&#xff08;JPMS…