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