java登录界面命令_Java命令行界面(第13部分):JArgs
java登录界面命令
JArgs 1.0的区别在于,这是我的第13篇文章的主题,该文章是关于Java命令行参数解析的。 JArgs是一个开放源代码( BSD许可 )库,主要由Steve Purcell和Ewan Mellor等 不同贡献者支持。 事实证明,这在第一次使用JArgs时可能会引起一些混乱,因为程序包名称和其他详细信息会根据您应用的JArgs版本而变化。
JArgs项目页面将JArgs描述为“供Java程序员使用的便捷,紧凑,预先打包并有详尽文档的命令行选项解析器套件。” 该页面断言,可能会选择JArgs而不是其他基于Java的命令行处理库,因为JArgs“易于使用,经过全面测试,有据可查且已获得广泛许可(BSD许可,因此不会出现GNU混乱)”。 该页面还指出:“该软件包很小,没有多余的装饰,但功能齐全,并且包含已投入生产使用相当一段时间的代码。”
JArgs确实很小。 jargs-1.0.zip文件的大小不足200 KB,而提取的核心jargs.jar仅约12 KB。 没有第三方库依赖项。 以下屏幕快照演示了从SourceForge下载的jargs.jar的内容( Maven存储库中可用的jargs-1.0.jar 与此类似)。
对于JArgs文档包括其主要Javadoc生成API文档和代码示例如OptionTest和CustomOptionTest 。
使用JArgs时,使用的主要类是CmdLineParser
( jargs.gnu.CmdLineParser或com.sanityinc.jargs.CmdLineParser取决于您在何处获得JArgs的发行版以及所获得的版本)。 如果使用通过SourceForge下载或通过Maven存储库 提供的JArgs JAR,则将使用的主要类是jargs.gnu.CmdLineParser
。 另一方面,如果您从GitHub(purcell / jargs)上的可用源构建JArgs,则主类将为com.sanityinc.jargs.CmdLineParser
。 无论哪种情况,都只有一个CmdLineParser
外部类,并且它使用嵌套类来提供额外的支持。 在这篇文章中,我将使用jargs.gnu.CmdLineParser
演示基于SourceForge / Maven JAR的jargs.gnu.CmdLineParser
。 我的示例的完整源代码将发布在GitHub上,并且可能会对该版本进行编辑,以利用更明确的导入来提高代码的简洁性和可读性。
JArgs很小,因此令人惊讶地很简单。 它没有提供很多精美的功能,但是它确实使用不使用注释或反射的简单编程方法来执行基本的命令行参数处理。
为了实现使用JArgs解析命令行参数的“定义”阶段,需要实例化CmdLineParser类的实例,并为每个预期的命令行选项在该实例上调用addOption(CmdLineParser.Option)方法 。 每个选项都由扩展CmdLineParser.Option类的类的实例表示。 在本系列的示例中,我一直在使用基于字符串的文件路径/名称选项和基于布尔的详细选项。 因此,在将JArgs用于这些示例时,可以将CmdLineParser.Option.StringOption类用作文件路径和名称,将CmdLineParser.Option.BooleanOption类用作详细选项。 下一个代码清单演示了使用JArgs实现“定义”阶段的过程。
JArgs的“定义”阶段
public static void main(final String[] arguments)
{final CmdLineParser cmdLineParser = new CmdLineParser();final CmdLineParser.Option fileOption = new CmdLineParser.Option.StringOption('f', "file");cmdLineParser.addOption(fileOption);final CmdLineParser.Option verbosityOption = new CmdLineParser.Option.BooleanOption('v', "verbose");cmdLineParser.addOption(verbosityOption);
使用JArgs进行“解析”仅需要一条语句,但是您确实需要捕获CmdLineParser.parse(String [])方法引发的两个检查的异常,或明确声明这些异常是从使用method调用的代码中引发的。 这显示在下一个代码清单中。
JArgs的“解析”阶段
try
{cmdLineParser.parse(arguments);
}
catch (CmdLineParser.IllegalOptionValueException | CmdLineParser.UnknownOptionException exception)
{out.println("Unable to parse command line options - " + exception);System.exit(-1);
}
当刚刚显示的代码成功执行(没有引发两个检查的异常之一)时,在其上调用parse(String[])
方法的CmdLineParser
实例现在包含为预期的命令行选项分析的值,因此我们准备“审讯”该实例。
JArgs命令行选项处理的“询问”阶段使用前面讨论的CmdLineParser.Option
-extended类上的方法来检索为每个选项解析的值。 CmdLineParser.getOptionValue()
方法的重载版本用于执行此询问。 如果未找到或解析选项,则仅接受需要其值的Option实例的方法[ getOptionValue(CmdLineParser.Option) ]返回null
。 如果未找到或解析该选项,则接受需要其值的Option实例和第二个“默认”对象[ getOptionValue(CmdLineParser.Option,Object) ]的方法将返回提供的默认对象。 在下面的代码清单中,我在两种情况下都使用了第二种形式,从而确保不必处理null
。
JArgs的“审讯”阶段
final String filePathName = cmdLineParser.getOptionValue(fileOption, "null").toString();
if (filePathName.equals("null"))
{out.println("ERROR: File path/name must be provided.");System.exit(-2);
}
out.println("File path/name is " + filePathName+ " and verbosity is " + cmdLineParser.getOptionValue(verbosityOption, false)+ ".");
有了这些基本代码示例,下面的屏幕快照中演示了如何运行使用JArgs进行命令行处理的简单Java应用程序。
CmdLineParser
类不附带任何内置的帮助/用法支持。 然而,在SourceForge上jargs-1.0.zip提供包括源代码AutoHelpParser ,延伸类CmdLineParser
和显示帮助/用法中如何实现。
由于它已经过时并且很简单,因此与本系列中讨论的其他一些基于Java的命令行解析库相比,JArgs可能可以与Java的较早版本一起使用。 当我在Maven提供的jargs-1.0.jar
和SourceForge提供的jargs.jar
中的CmdLineParser
上运行javap以确定使用它编译的Java版本时,我看到它的主要版本为45 ! 正如我在“以编程方式确定Java类的JDK编译版本”一文中所写的那样,主要版本为45表示该代码是使用JDK 1.1编译的!
Maven提供的jargs-1.0.jar
版本信息(来自jargs-1.0.jar
Classfile jar:file:/C:/lib/jargs-1.0/lib/jargs-1.0.jar!/jargs/gnu/CmdLineParser.classLast modified Apr 9, 2005; size 6032 bytesMD5 checksum b2d61c0ce786f8a661cccf1e61de2a19Compiled from "CmdLineParser.java"
public class jargs.gnu.CmdLineParserminor version: 3major version: 45
SourceForge提供的jargs.jar
版本信息(来自javap)
Classfile jar:file:/C:/lib/jargs-1.0/lib/jargs.jar!/jargs/gnu/CmdLineParser.classLast modified Apr 9, 2005; size 6032 bytesMD5 checksum b2d61c0ce786f8a661cccf1e61de2a19Compiled from "CmdLineParser.java"
public class jargs.gnu.CmdLineParserminor version: 3major version: 45
这是选择框架或库来帮助Java进行命令行解析时要考虑的JArgs的特征。
- JArgs是开源的,并获得BSD许可证的许可。
- 对于JArgs的版本和主要贡献者似乎有些困惑, Maven和SourceForge具有一个版本,而GitHub上的purcell / jargs具有另一个版本。
- JArgs既小又简单:
jargs.jar
(或Maven上的jargs-1.0.jar
)只有大约12 KB的大小,并且没有第三方库依赖项。 - JArgs使用程序化API来定义,解析和询问选项,而不是使用注释或反射。
- JArgs的日期有些过时,许多主页都有“最新更新”,例如2005年。但是,本文多次引用的GitHub页面,并且其主类具有不同的包名称,显示了其最新更新。是2012年。
- 我认为JArgs可以与当今的绝大多数Java应用程序一起使用,因为在我看来,JArgs可以与Java SE 1.1之前的 Java版本一起使用。
一个可能不得不使用JArgs而不是其他一些更常用的和/或更近期更新的基于Java的命令行处理的最令人信服的原因是它的简单性和小巧的体积。 有时我会面临一个决定,即我想支持JArgs提供什么级别的命令行选项,而当我想要的不仅仅是直接解析传入的String[]
到主函数时,可能需要的库。想要其他一些基于Java的命令行处理库的强大功能和复杂性。 我对使用JArgs的最大担心可能是它已经有一段时间没有更新了,并且可能会导致其他人使用我的工作并不得不处理JArgs的两种不同表现形式,并且其主要类的包名称不同(使用依赖的Maven在这里可能会很有帮助)。 JArgs既小巧又简单,对于那些只希望最基本的命令行处理的人来说,它可能会找到自己的利基。
其他参考
- JArgs SourceForge页面
- JArgs在SourceForge上下载
- Maven上的JArgs
- Ewan Mellor的页面:“ JArgs:Java的命令行选项解析套件 ”
- JArgs API文档 (Javadoc)
- GitHub上的JArgs : purcell / jargs
翻译自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-13-jargs.html
java登录界面命令
java登录界面命令_Java命令行界面(第13部分):JArgs相关推荐
- java登录界面命令_Java命令行界面(第18部分):JCLAP
java登录界面命令 Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库. 这篇文章的示例基于JCLAP 1.4 , ...
- java登录界面命令_Java命令行界面(第10部分):picocli
java登录界面命令 picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个单文件Java框架,用于解析命令行参数并生成 ...
- java登录界面命令_Java命令行界面(第7部分):JCommander
java登录界面命令 这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库. 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高, ...
- java登录界面命令_Java命令行界面(第26部分):CmdOption
java登录界面命令 由于Tweet,我了解了本系列中第26个基于Java的功能强大的库,该库用于解析命令行参数 . CmdOption在其GitHub主页上被描述为"一个通过注释配置的,用 ...
- java登录界面命令_Java命令行界面(第12部分):CLAJR
java登录界面命令 第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR). 该"库"是单个Java源文件( CLA ...
- java登录界面命令_Java命令行界面(第11部分):CmdLn
java登录界面命令 这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn(Java命令行解析器)来处理基于Java的应用程序中的命令行参数. Ost ...
- java登录界面命令_Java命令行界面(第15部分):Jargo
java登录界面命令 Jargo在其GitHub主页上定义为"一种减轻程序参数/选项处理的工具". 当已经存在许多其他命令行处理库时,该页面为另一个命令行处理库提供了基本原理 ,该 ...
- java登录界面命令_Java命令行界面(第16部分):JArgp
java登录界面命令 这篇文章中介绍的基于Java的命令行参数处理库是IBM developerWorks文章Java编程动态性,第3部分,应用的反射 (第2003 部分,此归档文章于2016年&qu ...
- java登录界面命令_Java命令行界面(第19部分):jClap
java登录界面命令 本系列中第19个帖子的重点是从Java代码解析命令行参数是jClap ( Java命令行参数解析器 ),不应与JCLAP库混淆,该库是我本系列前 一篇文章的重点. 上 一篇 文章 ...
最新文章
- jenkins slave在master显示和运行问题
- 常见四大类型视频接线DP、HDMI、DVI、VGA的比较
- IoC-spring 的灵魂(带你轻松理解IOC思想及bean对象的生成过程)
- 双重检查(Double-Check)
- js src 变量_Js基础学习笔记(一)
- detectandcompute 图像尺寸太大_基于深度局部特征的图像检索
- 在C#项目中使用SQLite(环境安装问题)
- angular中的表单验证
- 百度积极回应阿波龙项目不实报道;半数开发者认为学习新语言很困难;腾讯在长沙建立首个智慧产业总部……...
- 字符串在指针和数组上赋值的区别
- PocketSphinx语音识别系统的编译、安装和使用
- 使用Tensorflow进行脸部识别
- PHP高并发和大流量解决方案
- 初学者如何快速入门深度学习?
- s7edge固件android7.0,欧版S7 edge刷上Android 7.0之后:超级流畅
- ubuntu18.04配置静态ip和动态ip
- 计算机图标到桌面,显示桌面图标不见了怎么办?显示桌面图标不见了解决方法...
- eCognition软件中ESP2插件的下载与安装
- stimulsoft mysql_StimulSoft——将炫酷的报表写入你的应用程序
- 大学计算机人工智能知识点,人工智能及其应用知识点整理
热门文章
- P2350-[HAOI2012]外星人【线性筛】
- YbtOJ#20089-[NOIP2020模拟赛B组Day10]平衡的树【贪心】
- [2020.10.30NOIP模拟赛]小鱼吃大鱼【RMQ】
- P4989-二进制之谜【堆,贪心】
- jzoj3059-雕塑【容斥,数论】
- POJ2279-Mr. Young's Picture Permutations【线性dp】
- 【莫队】区间不同数(金牌导航 莫队-1)
- 【并查集】打击犯罪(ssl 2342)
- 动态规划训练14 [Max Sum Plus Plus HDU - 1024 ]
- JavaFX UI控件教程(十二)之List View