Java命令行界面(第24部分):MarkUtils-CLI

系列中有关使用Java解析命令行参数第一篇文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一。 Apache Commons CLI确实显示了它的时代,特别是与一些更现代的基于Java的命令行处理库相比时。 Mark A. Ziesemer的“ Apache Commons CLI上的CLI库包装”,称为MarkUtils-CLI,旨在“现代化” Apache Commons CLI,并且是本博客文章的主题。

Ziesemer在博客文章“ MarkUtils-CLI:Apache Commons CLI的注释(及更多) ”中写道:


我觉得Apache Commons CLI项目卖空了。 我发现它是一个非常全面,设计良好的库,可以有效地解析命令行。 我观察到的唯一缺点是该项目是在Java 5和注释可用之前开发的。 因此,该库不支持注释必须提供的任何功能。

引入MarkUtils的最新功能:MarkUtils-CLI是一个库,可在Apache Commons CLI和Java注释之间提供有效的桥梁,而无需替换成熟的Commons CLI库。

这篇文章使用的示例与本系列以前的文章(“文件”和“详细”命令行选项)相似,以说明MarkUtils-CLI如何包装Apache Commons CLI,并允许通过注释定义选项并提供类型化选项。 在本文中,使用MarkUtils-CLI的CliRunner是为了方便。 这些示例的完整源代码清单可在GitHub上找到

MarkUtils-CLI的“定义”阶段是应用@Parameter注释的地方,如下面的代码清单所示。

MarkUtils-CLI的“定义”阶段

@Parameter(name="f", longName="file", description="Path/name of file", required=true)
public String file;

@Parameter(name="v", longName="verbose", description="Verbosity enabled or not", argCount=0)
public boolean verbose;

此代码清单显示了如何将“短”选项名称 (单个连字符/单个字符)和“长”选项名称 (双连字符/单词)指定为@Parameter批注的不同元素。 MarkUtils-CLI创建的“帮助”中可以使用“ description ”元素,并且“ required ”注释元素允许您指定必需的选项。 将“详细”指定为argCount时 ,还向解析器指示“详细”选项不需要任何参数。

可以通过CliRunner和Apache Commons CLI CommandLineParser的实例在MarkUtils-CLI中完成“解析”阶段。 在下一个代码清单中对此进行了演示,其中将Apache Commons CLI的DefaultParser实例与该类的实例(其字段使用@Parameter注释进行注释)一起传递给CliRunner的构造函数。

MarkUtils-CLI的“解析”阶段

final DefaultParser cmdLineParser = new DefaultParser();
final CliRunner<Main> cliRunner = new CliRunner(cmdLineParser, Main.class);

当使用MarkUtils-CLI的CliRunner方法时,“询问”阶段是在Callablecall()方法中完成的,该方法传递给CliRunner的“ run”方法。 下一个代码清单中显示了“ call()”方法的实现, 在GitHub完整源代码清单中提供了将拥有的Callable传递给CliRunner的“ run”方法的代码

MarkUtils-CLI的“审讯”阶段

@Override
public Integer call() throws Exception
{
   out.println("File path/name is '" + file + "' and verbosity is " + verbose);
   return file != null ? 0 : -1;
}

后面的两个屏幕快照演示了到目前为止显示的示例。 第一张图片显示了当没有提供所需的“文件”选项时生成的帮助信息。 第二张图片描述了“文件”和“详细”的短名称和长名称选项的各种组合的示例代码的行为。

选择框架或库来帮助Java进行命令行解析时,需要考虑MarkUtils-CLI的特征。

MarkUtils-CLI是Apache Commons CLI的小型包装,通过使用批注和命令行选项类型的处理,使Apache Commons CLI体验现代化。 MarkUtils-CLI很可能会吸引那些已经在使用Apache Commons CLI的用户,并希望享受更轻松的带有注释的选项定义和更多类型安全的选项解析的好处。 该库的优点包括库的当前支持和全面的单元测试。 可能阻止某些人使用该库的问题是其GPL许可证及其对SLF4J的外部依赖关系(假定Apache Commons CLI依赖关系不是问题,因为它被宣传为Apache Commons CLI的包装器)。

其他参考

翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-24-markutils-cli.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值