java登录界面命令
这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn(Java命令行解析器)来处理基于Java的应用程序中的命令行参数。 Ostermiller Java实用程序包括几种不同类型的实用程序 ,但本文的重点是组件页面上描述的“命令行解析器”,“处理Java命令行程序的选项和参数”。
Ostermiller Utilities命令行解析器不使用注释,而是使用具有流畅API概念的程序生成器,而其他一些基于Java的命令行解析库也使用了API来代替注释。 com.Ostermiller.util.CmdLn和com.Ostermiller.util.CmdLnOption类在使用CmdLn进行命令行处理的“定义”阶段一起使用。 下一个代码清单中对此进行了演示。
CmdLn处理的“定义”阶段
public static void main(final String[] arguments)
{
final CmdLn cmdLn
= new CmdLn(arguments).setDescription("Demonstrates CmdLn")
.addOptions(new CmdLnOption[]{
new CmdLnOption("help",'h'),
new CmdLnOption("file",'f')
.setRequiredArgument()
.setArgumentBounds(1, 1)
.setDescription("Path and name of file"),
new CmdLnOption("verbose", 'v')
.setOptionalArgument()
.setArgumentBounds(0, 0)
.setDescription("Enable verbosity")
});
在刚刚显示的代码清单中,定义了三个选项。 一个选项是“帮助”选项,另外两个选项( -h
/ --help
和-v
/ --verbose
)是本系列中其他有关Java命令行解析的文章中使用的选项。 该代码说明可以为使用/帮助信息的每个选项设置一个描述,并且可以指定每个选项是必需的还是可选的。 setArgumentBounds(int,int)
方法用于指定每个选项期望的参数的最小值和数量。 file选项应该始终只有一个参数(文件的路径和名称),因此其最小值和最大值均为1。verbosity选项应该没有参数(其存在表示启用了verbosity),因此其最小值和最大值的参数都为0。
Ostermiller Java实用工具命令行解析器提供了三种方法来“定义”要解析的内容。 上面显示的方法在CmdLn页面上称为“按名称命名的选项”方法。 这些页面还演示了定义命令行选项的方法,这些选项将使用“ Option Enum”和“ Call to Listeners”方法进行解析(本文中未演示)。
通常,在有关使用基于Java的库进行命令行解析的文章中,在介绍了如何实现“定义”阶段之后,我将介绍如何实现“解析”阶段。 但是,使用Ostermiller Utilities命令行解析器时,“解析”阶段是隐式的,因此在首先介绍“询问”阶段之后,我将返回到该阶段。
通过在CmdLn实例上调用重载的getResult()方法之一来实现“询问”阶段。 如果重载的getResult(-)
方法返回null
,则该选项不存在(或在解析过程中找不到)。 如果该重载方法返回非null
值,则该值将为CmdLnResult类型,并表示已解析的选项。 返回的CmdLnResult
实例提供了用于访问与该选项关联的一个或多个参数的方法(例如,在我的示例中,访问-f
/ --file
选项的路径和文件名)。 下一个代码清单中将演示这种“询问”。
CmdLn的“审讯”阶段
if(cmdLn.getResult('h') != null)
{
cmdLn.printHelp();
System.exit(0);
}
String fileName = null;
if(cmdLn.getResult('f') != null)
{
fileName = cmdLn.getResult('f').getArgument();
}
else
{
out.println("Required parameter -f|--file not provided.\n" + cmdLn.getHelp());
System.exit(-1);
}
boolean verbose = false;
if (cmdLn.getResult('v') != null)
{
verbose = true;
}
out.println("File path/name is " + fileName + " and verbosity is set to " + verbose);
CmdLn
类还具有getResult s
方法,这些方法返回List<CmdLnResult>
来访问多个已解析的选项。 上面的示例演示了如何检查getResult()
方法调用的结果是否为null
以确定是否设置了选项。 GitHub上提供了用于此帖子的Java应用程序的完整源代码,并使用CmdLn.present(char)而不是null
检查来确定选项的存在。 区别可以在这里看到 。
Ostermiller Java实用程序命令行解析器不需要显式的“解析”调用。 相反,先前讨论的“询问”方法( getResult
和getResults
重载版本)在调用时进行隐式解析。 这些方法中的每一个都调用public
方法CmdLn.parse() ,但实际上只在第一个调用时进行解析,因为该实例将解析一个boolean
值,该boolean
值指示该实例无需在随后对getResult
或getResults
方法的调用中再次进行解析。 。
接下来的三个屏幕快照演示了如何使用Ostermiller Java Utilities命令行解析器对该简单Java应用程序进行使用。 当未指定任何参数(包括所需的文件路径/名称参数)时,第一张图像描述了输出。 第二张图描述了当指定--help
或-h
选项时生成的帮助/用法输出,并显示在这种情况下没有关于丢失参数的错误消息。 第三个屏幕快照演示了使用文件的简短形式和冗长形式以及详细信息选项的简单应用程序的“快乐路径”执行。
选择Ostermiller Java实用程序CmdLn的一些其他特征时,需要选择框架或库来帮助Java进行命令行解析。
- CmdLn所属的Ostermiller Java实用程序是开源的, OstermillerUtils许可证是GNU通用公共许可证版本2 (GPL)。 com.Ostermiller.util许可常见问题解答说明了为什么选择GPL以及避免将这些库“用于封闭源应用程序”的愿望。
- CmdLn是更大的Ostermiller Java实用程序的一部分,可以作为单个JAR来使用。
ostermillerutils-1.08.02.jar
大小约为272 KB,并且不需要第三方JAR(不需要其他外部依赖项)。 - Ostermiller Java实用程序需要J2SE 5或更高版本。
- 近年来,Ostermiller Java实用程序未见更新,但是版本历史记录详细说明了这些实用程序的长期可用性。
Ostermiller Java实用工具的命令行解析器部分很容易用于基本的命令行解析,并完成了工作。 但是,与本系列中讨论的大多数基于Java的开源命令行处理库相比,Ostermiller Java实用程序具有更严格的许可。 另外,需要包括整个Ostermiller Java实用程序JAR才能获得命令行处理功能,而对于某些简单的命令行驱动的应用程序而言,这可能会感到有些沉重。 我相信Ostermiller Java实用工具提供的命令行解析实用工具对于其应用程序已经将Ostermiller Java实用工具用于其提供的其他实用工具的开发人员而言,将最为有吸引力。
其他参考
- CmdLn:Java命令行解析器
- CmdLn OstermillerUtils JavaDoc
- 源代码 (托管在ostermiller.org)
- 下载com.Ostermiller.util Java实用程序
- Facebook上的Ostermiller Java实用程序
- Maven上的Ostermiller Java实用程序(1.07.00)
- GitHub上的Ostermiller实用程序: stephenostermiller / ostermillerutils
翻译自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-11-cmdln.html
java登录界面命令