这个有关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个可用的库,大多数开发人员应该能够找到一个满足自己需求的外部库。

其他参考

  • Java库用于解析命令行参数? [关闭]
  • 如何在Java中解析命令行参数?
  • 适用于Java的最佳CLI解析器
  • 我应该使用哪个库来处理Java程序的CLI参数?
  • Java命令行解析器比较

翻译自: https://www.javacodegeeks.com/2017/11/java-command-line-interfaces-part-30-observations.html

Java命令行界面(第30部分):观察相关推荐

  1. Java 常见的 30 个误区与细节

    转载自 Java 常见的 30 个误区与细节 1.在Java中,没有goto语句.因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用.同时,为了避免程序员自行使 ...

  2. java面试题30:牛客 下列哪项不属于jdk1.6垃圾收集器?

    java面试题30:牛客 下列哪项不属于jdk1.6垃圾收集器? A:Serial收集器 B:parNew收集器 C:CMS收集器 D:G1收集器 1.Serial收集器  单线程收集器,收集时会暂停 ...

  3. Java OpenCV 图像处理30 视频分析和对象跟踪 视频读取

    Java OpenCV 图像处理30 视频分析和对象跟踪 视频读取 Java OpenCV-4.0.0 图像处理 视频分析和对象跟踪 视频读取 package com.xu.opencv.video; ...

  4. elasticsearch批量插入数据的时候出现java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection

    问题: elasticsearch每次都批量插入几万数据量,然后就会出现下列问题.看这个问题应该是配置的问题 ERROR [https-jsse-nio-443-exec-4] 2020-07-09 ...

  5. 报错:java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection

    记录一个报错: java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-0 [ ...

  6. Java 常见的 30 个误区与细节!

    1   在Java中,没有goto语句. 因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用. 同时,为了避免程序员自行使用goto所带来的混乱,Java语言仍 ...

  7. Java命令行界面(第10部分):picocli

    picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助 ...

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

    本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个Java库,提供了基于注释的 ...

  9. Java命令行界面(第1部分):Apache Commons CLI

    尽管我通常使用Groovy编写要从命令行运行的JVM托管脚本,但是有时候我需要解析Java应用程序中的命令行参数,并且有很多库可供Java开发人员用来解析命令行参数. 在本文中,我将介绍这些Java命 ...

最新文章

  1. WebMessenger完善后将作为一个开源项目
  2. 每日一皮:重构时总会出现的惊喜.......
  3. linux ant脚本,linux下ant jmeter自动化测试
  4. 北京林业大c语言程序设计考试试题,2020年南京林业大学2017考研真题考研真题试卷及试题答案,C程序设计考研试题下载...
  5. python第九天(9-33)
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 5丨至少有5名直接下属的经理【难度中等】
  7. python图像卷积_图像处理——卷积原理、二维卷积python实现
  8. batchplot 3.6.2 插件_直播插件体系设计
  9. 全平台 Chrome 浏览器 44.0.2403.89 版本下载
  10. NYOJ77 - 开灯问题
  11. Java Jad 反编译class文件
  12. 当Top-k遇到深度学习
  13. 计算机病毒为了隐藏,识别计算机病毒的方法
  14. PCI Express解析——系列文章【2】:PCIe原理分析之——PCI Express线路基础
  15. 记一次无意间发现某学校图书检索系统的变量覆盖漏洞
  16. php edd,吐槽解密吸尘器戴森v10motorhedd和fluffy区别有啥?哪个好点?使用良心点评解析...
  17. fota 差分包_FOTA相关知识总结
  18. mysql1060,非公RX 480对比GTX 1060哪个好?RX 480对比GTX 1060全面对比评测
  19. android edittext 下拉菜单,Android 下拉列表 DropEditText
  20. vi指令说明(简易版)

热门文章

  1. 2021未来职业规划以及对过去的总结
  2. 建立Vue脚手架的必要性
  3. 如何使用bootstrap实现轮播图?
  4. 20级、19级 | 一天一瞬间!【日更】
  5. “温室里的花朵”也要直面困难
  6. JavaScript操作BOM简单案例
  7. C#实现人脸识别【SqlHelper】
  8. 数组的初始化与默认值
  9. 第1步 新建spring+springmvc+mybatis项目 每步都有 讲解 巨详细
  10. Angular 应用解决跨域访问的问题