为何迁移?
从Commons CLI迁移到Picocli值得吗?从一个命令行解析器移动到另一个命令行解析器有什么好处?这不只是重新装修我们应用程序的起居室吗?
最终用户体验
最终用户有哪些好处?
命令行完成。基于Picocli的应用程序可以在bash和zsh shell以及基于JLine的交互式shell应用程序中完成命令行。
美观,高度可读的用法帮助信息。Commons CLI生成的使用帮助有点简约。开箱即用,Picocli生成帮助,使用ANSI样式和颜色进行对比,以强调重要信息,如命令,选项和参数。使用注释可以轻松自定义帮助消息布局。此外,还有一个帮助API,以防您想要不同的东西。有关示例屏幕截图,请参阅Picocli 自述文件。
通过@ -files或“参数文件 ” 支持非常大的命令行。有时,用户需要指定比操作系统或shell支持的命令行更长的命令行。当Picocli遇到以字符开头的参数时,它会将该文件的内容扩展到参数列表中。这允许应用程序处理任意长度的命令行。@
开发经验
作为开发人员,您有什么好处?
通常,Picocli应用程序的代码将少于 Commons CLI等效代码。Picocli注释允许应用程序以声明方式定义选项和位置参数,其中所有信息都在一个位置。此外,Picocli提供了许多便利,如类型转换和自动帮助,可以处理一些机制,因此应用程序可以更专注于业务逻辑。本文的其余部分将更详细地说明这一点。
文档:Picocli有一个广泛的用户手册和详细的javadoc。
故障排除。Picocli具有内置的跟踪功能,便于故障排除。最终用户可以使用系统属性picocli.trace
来控制跟踪级别。支持的水平OFF
,WARN
,INFO
,和DEBUG
。默认跟踪级别为WARN
。
未来的扩张
最后,除了立即支付之外,从Commons CLI迁移到Picocli还有未来的好处吗?
Picocli有许多高级功能。您的应用程序可能尚未使用这些功能,但如果您希望将来扩展您的应用程序,Picocli支持嵌套子命令(以及任何深度的子命令),mixin可以重用,可以轻松地与依赖注入容器集成,以及有一个不断增长的工具框架,用于从Picocli CommandSpec
模型生成源代码,文档和配置文件。
最后,Picocli得到了积极的维护,而Commons CLI似乎已接近休眠状态,16年内发布了6个版本。
使用CheckStyle进行迁移的示例
命令行应用程序需要做三件事:
-
定义支持的选项
-
解析命令行参数
-
处理结果
让我们比较一下如何在Commons CLI和Picocli中完成,使用CheckStyle的com.puppycrawl.tools.checkstyle.Main
命令行实用程序作为示例。
迁移之前和之后的完整源代码都在GitHub上。
定义选项和位置参数
使用Commons CLI定义选项
Commons CLI有多种方法来定义选项:在此对象上Options.addOption
构建new Options(…)
和调用方法,不推荐使用的OptionBuilder
类和推荐的Option.Builder
类。
Checkstyle Main
类使用该Options.addOption
方法。首先为选项名称定义一些常量:
/ **选项's