这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数。 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点,并提供了一些一般性的考虑,以便在选择28个库中的一个或决定使用自己的命令行参数解析代码时进行选择。 尽管没有一个图书馆会最适合每种情况,但本文还将探讨某些图书馆在特定情况下可能比其他图书馆更适合。 该帖子将以原始28个库的一个子集结尾,根据该帖子所涉及的一些标准,这可能是所涵盖库中最吸引人的。
一般观察
查看本系列中涉及Java解析命令行参数的28个库后,可以得出一些结论 。
- 对于大多数情况下的大多数Java开发人员而言,似乎很少有理由编写自定义命令行解析代码 。
- 大量基于Java的库,用于解析命令行参数,以指示Java生态系统的广阔性。
- 所有28个涵盖的库都是开放源代码,这一事实提醒我们在Java文化中基本开放源代码的地位如何。
- 本系列文章涵盖的库之间有一些有趣的差异,各种不同的方法提醒我们,在Java中实现甚至相对较小的功能通常也有不止一种方法。
- Java中有大量用于解析命令行参数的库,其中许多与作者声明相关联,这些语句表明现有库无法满足其需求,这表明不可能有单一的语言,框架或库对每个人都是“最好的”。 如果不能将像命令行解析库这样简单的东西写成每个人都喜欢的东西,那么似乎不可能有一个更大的库,框架或编程语言成为每个人都喜欢的东西。 在库,框架和编程语言方面,“ 一种规格不能满足所有需求 ”。
- 在评估和选择库时,不仅要考虑技术实力,还应考虑技术因素。 它的许可证,分配机制,货币,提供者支持和社区支持也都影响了决策。 甚至将要运行的Java版本都在决策中起作用。
评估标准
当在如此众多的库之间进行选择以及权衡是使用库还是实现自己的命令行参数功能时,这些条件对于Java开发人员而言可能很重要。
- 它是开源的吗?
- 在这种情况下,我对开放源代码的简单定义是“开发人员可以使用该库合法地查看源代码。”
- 它的许可证是什么?
- 发行每个库所依据的许可证对于确定是否选择该库具有重要意义。
- 它的大小是多少?
- 库的使用通常意味着在类路径上有一个附加的JAR,在某些情况下,对于特定的部署环境,使这些附加的库的大小保持尽可能小可能很重要。
- 是否存在第三方依赖项?
- 第三方库增加了库大小的整体增加,并意味着要管理的依赖项更多。
- 分配机制是什么?
- 通过Maven存储库作为单个JAR的可用性可能是大多数Java开发人员获取库的最简单机制。
- 文献资料
- 本系列文章涵盖的库以各种方式进行了文档记录,包括项目文档,Javadoc文档,单元测试和代码内注释。
- 社区
- 对于开源项目,拥有一个使用该产品的大型社区通常是有利的,因为大型社区意味着更多的隐式测试以及可能会有更多关于如何使用该项目的博客文章,文章和论坛消息。
- 图书馆时代/最新更新
- 较新并不总是更好,但与使用多年未更新或更改的产品相比,使用接受当前和最新更新的开源产品通常更有吸引力。
- 它提供什么功能?
- 这是本系列中的库真正使自己与众不同的地方,但这是最难在库之间进行比较的标准,因为它实际上取决于所需的特定功能。
picocli GitHub 页面上的“ CLI比较”页面对本系列中涉及的许多库以及本系列中未涉及的一些库进行了比较和对比。 该页面通过列出每个库各自的属性(例如许可证,支持的最低Java版本,API样式和支持的解析选项)以表格格式比较库。
本系列涵盖了28种不同的库,用于解析Java的命令行参数。 为此,不可能在所有情况下都将其中任何一个指定为“最佳”库。 每个库都是其开发人员(或多个开发人员)对时间和精力的投资,但是我在这里尝试将库列表缩小到我认为最有可能吸引一般情况和开发人员的子集。
最有可能投票成功
以下库按字母顺序列出,而不是按我的偏爱顺序列出。
- Apache Commons CLI
- 在我看来,Apache Commons CLI在推荐的库的缩小子集中提供了最不美观的API。
- args4j
- args4j具有众多功能,并且具有高度可扩展性。
- 指挥官
- API由注释和构建器的易于使用的组合组成。
- JewelCli
- JewelCli的带注释接口方法吸引了我。
- Picocli
- 高度可读的基于注释的API。
尽管我列出了涵盖的28个库中的5个库的子集,但是由于某些原因,开发人员可能选择使用不在此缩小列表中的23个库之一。 不在此列表中的几个库提供了独特的功能,这些功能如果对Java开发人员来说足够重要,将使这些库优于上面列出的5个。
接下来的清单将一些涵盖的库与它们相对独特的优势联系在一起。 即使它不是我刚刚强调的五个列表中的一个,也可以选择其中的一个,如果它在特殊情况下具有独特的优势,并且是相关应用程序最重要的考虑因素之一。 列出的许多“特征”是喜好或品味的问题,这意味着具有列出的特征的文库可能被一个开发人员视为肯定,而被另一个开发人员视为否定。
特征 | 说明/利益 | 具有所需特征的图书馆 |
---|---|---|
颜色语法 | 颜色语法(选择环境) | Picocli |
命令完成 | 自动完成命令(某些环境) | Picocli |
配置(注释) | 主要使用注释来定义命令行选项。 | 航空公司2 args4j 解析器 CmdOption 命令行 谷歌选项 杰博克 指挥官 JewelCli MarkUtils-CLI Picocli 罗普 |
配置(API) | 使用编程API(传统和/或生成器)定义命令行选项。 | Apache Commons CLI Argparse4j argparser CmdLn getopt4j 雅高 杰格普 杰格斯 联合会 拍手 JOpt简单 JSAP jw选项 解析cmd |
配置(反射) | 使用反射(但不使用注释)定义命令行选项。 | 克拉尔 |
配置(XML) | 使用或支持使用XML定义命令行选项。 | 突击队 JSAP |
单一档案来源 | 可以轻松地将“库”作为已编译的源代码文件而不是作为针对其进行编译的JAR包含在项目中。 | 克拉尔 Picocli |
小罐子 | 提供最小要求的JAR且大小小于25 KB的库(适用于本系列中介绍的版本)。 | 克拉尔 解析器 getopt4j 杰格普 杰格斯 拍手 jw选项 罗普 |
在基于Java的命令行分析库中,人们可能希望拥有许多其他特性,这些特性可能会缩小适当候选对象的数量。 这些包括命令样式(长名称和/或简称,样式[GNU,POSIX,Java等])的灵活性,适用的许可证,当前支持的可用性,新版本和更新,用户社区的大小以及Java的最低版本被支持。 先前参考的Java命令行解析器比较中提供的表使本系列涵盖的大多数库的某些特征比较变得容易。
这个使用Java解析命令行参数的系列展示了28个库,并且该系列中还没有涉及更多公共可用的库。 拥有超过30个可用的库,大多数开发人员应该能够找到一个满足自己需求的外部库。
其他参考
翻译自: https://www.javacodegeeks.com/2017/11/java-command-line-interfaces-part-30-observations.html