Java命令行界面(第30部分):观察

这个有关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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java导出excel 科学计数法_基于Java将Excel科学计数法解析成数字

需要注意的是一般的科学表达式是1.8E12 1.8E-12而在Excel中的科学表达式是1.8E12 1.8E-12我写的科学计数法的正则表达式是(-?\d\.?\d*)[Ee]{1}[\-]?[0-9]*导入EXCEL数据时将科学计数法解析成数字,Java代码:import java.text.DecimalFormat;import jav…

java描边_shape描边设置是否显示四周描边

android:width"1pt"/>android:topRightRadius"30pt"android:bottomRightRadius"30pt" />效果图如下:这里设置了左边描边不显示设置虚线:android:shape"line">android:dashGap"3pt"android:d…

java 垃圾回收手动回收_Java垃圾回收(2)

java 垃圾回收手动回收并行清理 今天,我们介绍了并行GC的工作原理。 具体来说,这是在Eden上运行并行Scavenge收集器,在Tenured一代上运行Parallel Mark and Sweep收集器的组合。 您可以通过传递-XX: UseParallelOldGC来获得此选项…

java正则表达式性能_译:Java 中的正则表达式性能概述

译者:Darren Luo1. 概述在本快速教程中,我们将展示模式匹配引擎是如何工作的。我们还将介绍在 Java 中优化正则表达式的不同方式。有关正则表达式的的使用介绍,请参阅此文。2. 模式匹配引擎java.util.regex 包使用了一种叫做 Nondeterministi…

带注释的控制器– Spring Web / Webflux和测试

Spring Webflux和Spring Web是两个完全不同的Web堆栈。 但是, Spring Webflux继续支持基于注释的编程模型 使用这两个堆栈定义的端点可能看起来相似,但是测试该端点的方式却大不相同,并且编写此端点的用户必须知道哪个堆栈处于活动状态并相应…

jquery解析java对象数组_Javascript / jQuery初学者:将对象推送到数组

Well you are changing the reference of same object通过示例了解它是如何工作的let a {};let b a;a.name xyz;a.name abc;console.log(a.name)console.log(b.name)所以在上面的示例中我们有两个变量a和b . a是一个对象 .每当我们更新名称时,最后一个值将被新的…

java查看jvm对象个数_jmap-查看 jvm 内存对象信息

jmap 概述命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件,也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。参数option:选项参数。pid:需要打印配置信息的进程ID。executable:产…

OpenHub框架进行的异步通信

在本系列的前一部分中,我们介绍了OpenHub框架 。 这部分显示了框架最强大的功能之一- 异步消息传递模型 。 当源系统无法等待目标系统的响应时,将使用系统之间的异步通信。 有以下几个原因: 源系统必须尽可能地响应 ,并且不受外…

Java实现C语言select函数_一道面试题目,分别用sql 和java,c++, c语言实现,

引用来自“雨翔河”的评论获取国家假日办的的信息,然后根据假日办提供的信息来搞定。日期的话,哈哈,找个提供日期查询的接口,借用一下来查日期,也搞定了。总之哪里有的抄就抄哪里的。再来一个笨蛋的意见,把…

java注解的反射_Java注解与反射

概要本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础。注解:什么是注解Annotation的作用不是程序本身,但是可以对程序作出解释。可以被其他程序(比如:编译器等)…

工厂设计模式和策略设计模式_设计模式:策略

工厂设计模式和策略设计模式这次我想谈谈策略设计模式 。 通过这种方式,我开始撰写有关行为设计模式的文章。 这种模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好。此方法的最本质点是对象之间的松散耦合。 当您的应用程序中有多个实现目的…

java 8 排序反转_Java 8 排序小结

1、概述首先,让我们先定义一个简单的实体类:Datapublic class Human {private String name;private int age;public Human() {super();}public Human(final String name, final int age) {super();this.name name;this.age age;}}2、不使用Lambda表达式…

如何将不带web.xml的Spring应用程序部署到Tomcat

介绍 由于Servlet 3规范不再需要web.xml来配置Web应用程序,因此已通过使用注释代替。 在本文中,我们将研究如何在不使用web.xml情况下将简单的基于Spring的应用程序部署到Tomcat 8.5。*。 创建一个空的应用程序 使用以下命令使用maven webapp原型创建一…

java创建单线程计时器_我们如何在Java中实现计时器线程?

该定时器类计划任务一次或多次给定的时间运行。它也可以作为后台程序线程在后台运行。要将Timer与守护程序线程相关联,有一个带有布尔值的构造函数。计时器以固定的延迟和固定的速率安排任务。在固定的延迟中,如果系统GC延迟了任何执行,则其他…

Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

资源介绍课程简介:xa0xa0Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频----------------------课程目录Python项目实战篇[初级项目:图片社交电商导购漂流瓶]项目实现功能: 用户注册,登录,登出图片的多种…

java04376_Java - jdbc mybatis

jdbc首先配置maven包org.springframework.bootspring-boot-starter-jdbcorg.mybatis.spring.bootmybatis-spring-boot-starter2.1.0注意pom.xml中配置结点src/main/java**/*.xmlfalsesrc/main/resourcesstatic/*.*templates/*.***/*.xml**/*.yml**/*.propertiesfalse针对不同的…

设计模式 建造者模式_设计模式:建造者

设计模式 建造者模式有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式,另一种是Builder设计模式。 在某些情况下,您甚至可以结合使用这两种模式。 但是在本文中,我想研究一下Builder设计模式 。 我需要说的第一件事是创造…

在MongoDB和Spring Batch中将XML转换为JSON和原始使用

总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON。 某些应用程序可能需要存储原始(未修改的)JSON&#xf…

java hash=0报空指针_怎么报空指针异常错误?

源自:2-2 开发第一个自定义标签怎么报空指针异常错误?java.lang.NullPointerExceptionat org.apache.tomcat.util.descriptor.tld.TldResourcePath.hashCode(TldResourcePath.java:164)at java.util.HashMap.hash(HashMap.java:338)at java.util.HashMap…

php 跳回上一页_php – Laravel 5 – 登录后重定向回到上一页

我有一个页面上有一些内容和评论部分.注释只能由已登录的用户保留,因此我已将登录表单添加到页面以供用户登录(仅在他们尚未登录时显示).我遇到的问题是,当用户登录时,他们会被重定向回主页,而不是他们之前所在的页面.我还没有从开箱即用的设置中更改登录方法.任何人都可以建议…