Java命令行界面(第20部分):JSAP
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'
是短选项名称,而长选项名称在它们各自的调用( file
和verbose
)之后。 请注意,命令行参数的“定义”也可以通过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相关推荐
- 关于JAVA异常处理的20个最佳实践
关于JAVA异常处理的20个最佳实践 在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked excep ...
- Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...
- 吉比特java开发_JVM 吉比特后台 Java 开发实习生 20 分钟一轮游 _好机友
吉比特后台 Java 开发实习生 20 分钟一轮游 作者:胖若两人 链接:https://www.nowcoder.com/discuss/155198?type=2&order=3& ...
- 好程序员Java培训分享20个Java程序员基础题
好程序员Java培训分享20个Java程序员基础题1.谈谈final.finally.finalize的区别 final用于声明属性,方法和类,分别标识属性不可变,方法不可覆盖,类不可继承. fina ...
- Java能够长盛不衰20年的秘密
编程语言至于程序员就如同学武之人手中的兵器,其重要性不言而喻.在当今众多世界编程语言中(应该会超过100种)挑选出一个来作为自己的职业依靠并不容易,特别是随着时代的更迭,今天还很流行的编程语言或许很快 ...
- 库珀科技招聘Java/前端/测试[20~60K][18~24薪][成都][可远程]
库珀科技 库珀科技是一家提供高并发低延迟技术解决方案的科技公司,主要给海外类似于美国上市公司Coinbase这样的平台提供全量的技术解决方案,我们服务的企业业务在高速增长,已经进入全球Top5. 工作 ...
- 坦白局!一个大厂 Java 工程师近 20 年的进阶心得
我是湘王,一位近20年经验的开发工程师,有丰富的VB.PHP.Python.Java开发经验,曾管理过大厂200+人的软件开发团队,任职过CTO(首席技术官),也有持续创业经历,对于Java学而不精, ...
- Java的知识点20——包装类基本知识、包装类的用途、自动装箱和拆箱、包装类的缓存问题
包装类基本知识 将基本数据类型存储到Object[]数组或集合中的操作 包装类均位于java.lang包 "数字型"都是java.lang.Number的子类.Number类是抽象 ...
- Java快速生成20亿数字_关于内存:Java-打印10亿到20亿
我想打印1000000至1999999999. 我以为这是一件容易的事,但是蚀告诉了我一些有关内存错误的信息. 我该怎么办? 我想要一个文本数据,其中所有数字都来自 将1000000000至19999 ...
最新文章
- 《学习OpenCV》第三章习题 第3题
- 运筹学(最优化理论)学习笔记 | 分支定界法
- Python引用模块和查找模块路径
- 【CyberSecurityLearning 13】简单抓包及 IP包头分析与 路由原理(一)
- 注意!!Redis使用不当真的可能会导致应用卡死
- 【开发者portal在线开发插件系列二】多条上下行消息(messageId的使用)
- Newland Plan
- c语言设计题库及详解答案,c语言程序设计题库及其答案
- OpenCV 二值化分割方式
- HTTP协议和TCP/IP协议与Socket之间的区别
- 项目经理的“势能”培养 (转)
- 自动打卡php,使用腾讯云实现网易云自动打卡签到 | 小七呀w
- -bash: netstat: command not found
- C51/C52单片机printf打印出来的值是原来值的256倍
- 火遍日本 IT 界的深度学习入门书,你读完了吗?
- 【Linux】红帽子安装过程超详细(学生教学用)
- Bhuman应用篇——带球及踢球
- SAP 业务交易事件BTE(Business Transaction Event)
- Windows 下无痛安装 TensorFlow (GPU版)
- php制作日历带节日实验目的,PHP 制作的日历一份