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

本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2GitHub项目页面描述了该库,“ 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 CollectionsApache Commons Langjavax.inject / javax.inject具有运行时依赖性。 。
  • 尽管航空公司已经存在了一段时间,但航空公司2是该项目的最新更新。
  • Airline 2基本用法的文档非常直接且有用,但是本文中未显示的许多功能的文档仍在构建中,包含许多“ TODO”语句。

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

其他参考

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值