JSAP ( Java Simple Argument Parser )2.1是本系列文章的第二十篇,重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因:“我在Internet上找到了几个解析器,所有解析器都处理了开关,但是在解析返回类型和配置文件方面,都没有我想要的多功能性。”

JSAP提供了相当多的灵活性,但付出了一些复杂性的正常代价。 幸运的是,JSAP提供了一个名为SimpleJSAP的类,它使使用JSAP完成简单任务变得更加容易。 JSAP文档以这种方式表达了这一观点: “如果您想减少处理命令行的代码量,JSAP提供了一个SimpleJSAP,可以为您完成大部分工作。” 下一个代码清单演示了在单个(尽管很冗长)语句中使用SimpleJSAP来定义预期的命令行选项。

JSAP的“定义”阶段

final SimpleJSAP jsap = new SimpleJSAP("Main Application","Demonstrate JSAP",new Parameter[]{new FlaggedOption("file", STRING_PARSER, NO_DEFAULT, REQUIRED, 'f', "file", "File path/name."),new Switch("verbose", 'v', "verbose", "Requests verbose output." )});

对于上面的代码清单,我使用静态导入来减少此“定义”代码的冗长性。 这些可以在GitHub上的完整代码清单中看到。 上面的代码定义了本系列中用于解析Java命令行参数的库中所有文章中使用的两个选项:文件路径/名称和详细程度。 单个字符'f''v'是短选项名称,而长选项名称在它们各自的调用( fileverbose )之后。 请注意,命令行参数的“定义”也可以通过XML进行配置 ,尽管此处未演示。

所述“语法分析”阶段在司法制度评估方案与其中的调用另一单个语句实现解析(字符串[])上的实例方法SimpleJSAP返回的一个实例JSAPResult 。

JSAP的“解析”阶段

final JSAPResult parsedResult = jsap.parse(arguments);

JSAP的“询问”阶段是通过调用parse方法返回的JSAPResult实例来完成的,如下面的代码清单所示。

JSAP的“审讯”阶段

out.println("File path/name is '" + parsedResult.getString("file") + "'.");
out.println("Verbosity level is " + parsedResult.getBoolean("verbose"));

JSAP将生成自动用法和帮助语句。 下一个代码清单演示了如何使用SimpleJSAP.messagePrinted()方法来确定是否发生了一些解析错误,然后使用SimpleJSAP.getHelp()消息来访问自动生成的“帮助”消息。

JSAP的“帮助”

if (jsap.messagePrinted())
{out.println(jsap.getHelp());System.exit( -1 );
}

接下来的两个屏幕快照演示了如何使用JSAP执行本文中所示的代码示例。 第一张图片描述了未提供所需的-f / --file标志时打印的用法说明。 第二幅图描绘了基于JSAP的示例代码的正常行为。

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

  • JSAP是开源的,并获得了次级GNU公共许可证 (LPGL)的许可 。
  • JSAP-2.1.jar JAR文件的大小约为68 KB,基本功能不需要第三方依赖。
    • 从XML加载JSAP配置的能力(本文未涵盖)确实需要XStream 。
  • 《 JSAP手册》更详细地讨论了当有其他可用的Java命令行解析替代方法时, 为什么编写JSAP的原因 。
  • JSAP被其他产品使用 , 受到了一些用户的好评 ,并且已在Groovy中代替内置的 Apache Commons CLI使用 。

JSAP似乎是较旧的基于Java的命令行解析库中较流行的一种。 像本文中演示的那样,基本功能相对容易使用,但是还可以提供更多的灵活性和可定制性,以满足更复杂的需求。

其他资源

  • JSAP v2.1:Java简单参数解析器
  • SourceForge上的JSAP
  • JSAP – Java简单参数解析器(v2.1)手册
  • MvnRepository上的JSAP
  • JSAP API文档 (Javadoc)
  • 解析命令行参数– JSAP
  • Groovy的命令行参数解析 (使用JSAP)

翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-20-jsap.html

Java命令行界面(第20部分):JSAP相关推荐

  1. 关于JAVA异常处理的20个最佳实践

    关于JAVA异常处理的20个最佳实践 在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked excep ...

  2. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系

    Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...

  3. 吉比特java开发_JVM 吉比特后台 Java 开发实习生 20 分钟一轮游 _好机友

    吉比特后台 Java 开发实习生 20 分钟一轮游 作者:胖若两人 链接:https://www.nowcoder.com/discuss/155198?type=2&order=3& ...

  4. 好程序员Java培训分享20个Java程序员基础题

    好程序员Java培训分享20个Java程序员基础题1.谈谈final.finally.finalize的区别 final用于声明属性,方法和类,分别标识属性不可变,方法不可覆盖,类不可继承. fina ...

  5. Java能够长盛不衰20年的秘密

    编程语言至于程序员就如同学武之人手中的兵器,其重要性不言而喻.在当今众多世界编程语言中(应该会超过100种)挑选出一个来作为自己的职业依靠并不容易,特别是随着时代的更迭,今天还很流行的编程语言或许很快 ...

  6. 库珀科技招聘Java/前端/测试[20~60K][18~24薪][成都][可远程]

    库珀科技 库珀科技是一家提供高并发低延迟技术解决方案的科技公司,主要给海外类似于美国上市公司Coinbase这样的平台提供全量的技术解决方案,我们服务的企业业务在高速增长,已经进入全球Top5. 工作 ...

  7. 坦白局!一个大厂 Java 工程师近 20 年的进阶心得

    我是湘王,一位近20年经验的开发工程师,有丰富的VB.PHP.Python.Java开发经验,曾管理过大厂200+人的软件开发团队,任职过CTO(首席技术官),也有持续创业经历,对于Java学而不精, ...

  8. Java的知识点20——包装类基本知识、包装类的用途、自动装箱和拆箱、包装类的缓存问题

    包装类基本知识 将基本数据类型存储到Object[]数组或集合中的操作 包装类均位于java.lang包 "数字型"都是java.lang.Number的子类.Number类是抽象 ...

  9. Java快速生成20亿数字_关于内存:Java-打印10亿到20亿

    我想打印1000000至1999999999. 我以为这是一件容易的事,但是蚀告诉了我一些有关内存错误的信息. 我该怎么办? 我想要一个文本数据,其中所有数字都来自 将1000000000至19999 ...

最新文章

  1. 《学习OpenCV》第三章习题 第3题
  2. 运筹学(最优化理论)学习笔记 | 分支定界法
  3. Python引用模块和查找模块路径
  4. 【CyberSecurityLearning 13】简单抓包及 IP包头分析与 路由原理(一)
  5. 注意!!Redis使用不当真的可能会导致应用卡死
  6. 【开发者portal在线开发插件系列二】多条上下行消息(messageId的使用)
  7. Newland Plan
  8. c语言设计题库及详解答案,c语言程序设计题库及其答案
  9. OpenCV 二值化分割方式
  10. HTTP协议和TCP/IP协议与Socket之间的区别
  11. 项目经理的“势能”培养 (转)
  12. 自动打卡php,使用腾讯云实现网易云自动打卡签到 | 小七呀w
  13. -bash: netstat: command not found
  14. C51/C52单片机printf打印出来的值是原来值的256倍
  15. 火遍日本 IT 界的深度学习入门书,你读完了吗?
  16. 【Linux】红帽子安装过程超详细(学生教学用)
  17. Bhuman应用篇——带球及踢球
  18. SAP 业务交易事件BTE(Business Transaction Event)
  19. Windows 下无痛安装 TensorFlow (GPU版)
  20. php制作日历带节日实验目的,PHP 制作的日历一份

热门文章

  1. 一分钟理解Java公平锁与非公平锁
  2. 阿里P9谈程序员程序员的青春饭
  3. Java 多文件上传
  4. Java正确获取客户端真实IP方法整理
  5. Shell入门(八)之布尔运算
  6. 搭建ssh框架的步骤
  7. java通过commons-fileupload实现多张图片的上传(jsp页面)
  8. Sentinel流控规则持久化
  9. 网站压力测试软件(Apache JMeter)2.13 官方版 Error: Unable to access jarfile ApacheJMeter.jar
  10. swagger传递日期类型 json形式