本系列文章的第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

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

  1. java计算机毕业设计springboot+vue航空公司电子售票系统-机票预订系统

    项目介绍 通篇文章的撰写基础是实际的应用需要,然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程,以远程教育系统的实际应用需要出发,架构系统来改善现远程教育系统工作流程繁琐等问题 ...

  2. 航空订票系统界面java_Java命令行界面(第21部分):航空公司2

    航空订票系统界面java 本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个J ...

  3. JAVA毕业设计航空公司机票预订管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计航空公司机票预订管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计航空公司机票预订管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B ...

  4. java计算机毕业设计航空公司机票预订管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计航空公司机票预订管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计航空公司机票预订管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...

  5. 计算机毕业设计Java航空公司机票预订管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java航空公司机票预订管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java航空公司机票预订管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  6. Java命令行界面(第30部分):观察

    这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数. 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点,并提供 ...

  7. Java 7 Update 21安全改进的详细信息

    甲骨文昨天发布了三个Java更新 . 重要的是要注意它们包含一些与安全性相关的更改. 一段时间以来,已经宣布了其中的大多数更改,并且首先要注意的是Oracle按计划交付. 甲骨文公司Java平台安全经 ...

  8. 全球案例 | 一家有着百年历史的航空公司如何扩展和转型,推动航空业创新

    在快速增长和行业不断变化的大背景下,法航荷航集团利用 Atlassian Data Center 保持一流服务,同时无缝扩展到 10,000 多名用户. 航空之路并不只是莱特兄弟铺设的.20 世纪初, ...

  9. java计算机毕业设计南京市某物流公司管理信息系统源代码+数据库+系统+lw文档

    java计算机毕业设计南京市某物流公司管理信息系统源代码+数据库+系统+lw文档 java计算机毕业设计南京市某物流公司管理信息系统源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 ...

最新文章

  1. 【iOS7开发笔记】tableview之通过代码自定义cell(cell的高度不一致)
  2. Sublime3 快捷键
  3. 记录 spring 使用@Value获取properties文件中的属性值
  4. 精品家具办公桌椅企业html5官网模板
  5. 创建此对象的程序是quation_MathType出现此对象创建于Equation中的问题怎么办
  6. RDP协议详细解析(五)
  7. bootstrap treetable 树形网格,动态扩展,连数据库
  8. mysql修改表编码为ytf8_如何修复“TypeError:x和y必须具有相同的数据类型,got”tf.uint8型!= tf.float32型“当我试图以十为单位调整图像大小时...
  9. 使用 jQuery 修改 css 中带有 !important 的样式属性
  10. 搭建一个简单的SpringBoot项目
  11. 关于“该计算机已安装更高版本的Google Chrome浏览器“问题解决方法
  12. 关于html中锚点功能的使用
  13. php选择栏可输入可选择,填制凭证时,“科目名称”栏可选择用下列()方法输入。...
  14. Thunderbolt雷电接口
  15. 切片法分割树冠与树干
  16. no-repeat失效
  17. Remove Assignments to Parameters 移除对参数的赋值
  18. JavaScript - 核心语法学习
  19. 2019榆次初三计算机考试时间,2019年晋中中考考试时间安排,晋中中考考试科目科目...
  20. 硬盘分区失败丢失数据如何恢复

热门文章

  1. 面试官让我讲下线程的WAITING状态,我笑了
  2. 汇编语言(一)之反转字符串输出
  3. MySQL count()函数
  4. Streaming的算法Reservoir Sampling
  5. java 为什么需要常量池 1
  6. Java NIO系列教程(十) Java NIO DatagramChannel
  7. C#的类修饰符和成员修饰符
  8. 你想象中的实习是什么样的?
  9. 深入理解python的元组本身不可变性
  10. 264. 丑数 II---LeetCode---JAVA(动态规划)