该网站未在腾讯云备案,网页界面图,seo网站排名优化案例,手机网官网第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 #xff08;CLAJR#xff09;。 该“库”是单个Java源文件#xff08; CLAJR-0.9.java #xff09;#xff0c; 可从SourceForge下载 。 CLAJR的主页当前显示2006年版权日期#xff… 第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 CLAJR。 该“库”是单个Java源文件 CLAJR-0.9.java 可从SourceForge下载 。 CLAJR的主页当前显示2006年版权日期可下载的源zip文件CLAJR-0.9-src.zip的日期为2008年12月6日。尽管CLAJR近年来似乎在很大程度上不受支持尽管我不太可能选择CLAJR在本系列中已经讨论过的一些用于处理Java代码的命令行参数的替代库中我相信CLAJR值得一提。 即使有些人选择不使用它CLAJR也有一些相当独特的特性使它变得有趣。 CLAJR未作为JAR提供。 而是以单个压缩文件的形式提供该ZIP文件中包含单个Java源代码文件。 作为单个源代码文件提供不是CLAJR独有的。 Picocli也以单个Java源代码文件提供。 但是Picocli还在Maven存储库我在使用Picocli时使用的存储库上提供了JAR但是我不知道带有适用于CLAJR的.class文件的预构建JAR。 因此由于在使用第三方库时我比源代码文件更喜欢JAR因此我在尝试CLAJR时所做的第一件事是将其提供的源代码构建到一个小的JAR文件中。 这是我使用CLAJR构建JAR的步骤我必须对源文件进行一些更改而该更改将在本文后面描述 从SourceForge 下载 CLAJR-0.9-src.zip 。 解压缩CLAJR-0.9-src.zip以提取CLAJR-0.9.java 。 创建一个目录clajr来表示Java源类应位于其中的Java clajr包。 将CLAJR-0.9.java文件移动到clajr目录并将其重命名为CLAJR.java以匹配该源文件中类的名称。 我还必须编辑源代码以进行较小的更改 这将在后面的文章中详细讨论。 使用javac将CLAJR.java文件编译为多个类文件。 使用jar将已编译的.class文件组装成一个JAR我将其命名为CLAJR-0.9.jar 。 以下两个屏幕快照说明了上述步骤。 本系列到目前为止所介绍的基于Java的命令行解析库倾向于使用注释或特定的编程API以允许在Java代码中定义解析和询问命令行参数。 顾名思义CLAJR使用Java反射来定义要解析的预期参数。 CLAJR主页上描述了为什么作者选择对方法名称进行反思以定义命令行参数。 CLAJR寻找名称与要处理的一个或多个参数相对应的方法。 单下划线在单连字符命令行参数的方法名称之前而双下划线在双连字符命令行参数的方法名称之前。 当多个命令行参数执行相同的操作时可以将单个方法命名为与多个命令行参数对齐。 与本系列的其他文章一样本文的示例演示了如何使用CLAJR库对--file / -f命令行参数和--verbose / -v命令行参数进行建模。 为了在CLAJR中“定义”这些参数我需要将我的方法_f__file和_v__verbose为与-f / --file和-v / --verbose参数相对应。 下一个代码清单中的嵌套类Options的部分代码片段对此进行了演示。 CLAJR中的“定义”阶段反思 /*** Used reflectively by CLAJR to parse and interrogate command line* options defined as fields in this class.*/
public static class Options
{private String file;private boolean verbose;public void _v__verbose(){verbose true;}public void _f__file(String newFilePathAndName){file newFilePathAndName;} 使用CLAJR进行解析仅需一个语句。 接下来的两行代码演示了如何调用静态CLAJR.parse(String[], Object...)并将上面部分显示的命令行参数和Options类的刚刚实例化的实例传递给它。 CLAJR中的“解析”阶段 final Options options new Options();
CLAJR.parse(arguments, options); 在上面显示的单行分析中 parse方法没有返回值。 相反传入的“选项”实例的字段根据在命令行上提供的参数填充。 CLAJR在“选项”实例的方法上使用反射以找到在命令行上发现相应参数时要调用的方法。 正是Options这种实例人们可以“询问”以在命令行上找到参数的值。 下一个代码清单对此进行了演示。 CLAJR的“审讯”阶段 out.println(File is options.getFile() and verbosity is set to options.isVerbose() .); CLAJR支持通过反思按方法提供帮助/使用信息。 在这种情况下方法的命名方式与命令行参数本身的约定类似但是在方法名称之前带有help 。 下一个代码清单中前面显示的参数的两种组合对此进行了演示。 CLAJR“帮助”方法 public String help_v__verbose()
{return Enables verbosity of output.;
}public String help_f__file()
{return Path and name of file.;
} 刚刚显示的代码清单中的方法为-v / --verbose和-f / --file参数提供“帮助”字符串。 静态CLAJR方法CLAJR.getHelp()方法提供了一个String表示基于这些方法的命令行用法。 CLAJR提供了可以捕获的不同异常这些异常通常与“帮助”方法结合使用。 在下一个代码清单中演示了这些内容该清单显示了可以执行的与不同错误情况相关的多个捕获以及其他保证显示错误信息的情况。 CLAJR的CLAJR.getHelp和CLAJR异常 catch (CLAJR.EmptyArgumentListException emptyArgsEx)
{out.println(Usage: Main -f|--file [-v|--verbose]);
}
catch (CLAJR.HelpNeededException helpNeededEx)
{out.println(CLAJR.getHelp());
}
catch (CLAJR.ParseException parseEx)
{out.println(parseEx.getMessage());out.println(CLAJR.getHelp());
}
catch (Throwable throwable) // CLAJR.parse throws Throwable
{out.println(throwable.getMessage());
} CLAJR 0.9的CLAJR.parse(String[], Object...)方法抛出Throwable 因此上面的代码捕获了Throwable 。 接下来的三个屏幕快照展示了这个简单的示例。 第一张图片显示了没有提供参数时打印的用法。 第二张图描绘了定义解析和询问命令行参数的正常流程。 第三个图像演示了在命令行上提供意外的参数时显示的帮助信息。 为了使示例CLAJR.java 我必须更改CLAJR.java源文件。 具体来说我将invoke(String, String, boolean, List)方法中的491行从if (tails null)更改为if (tails null || tails.isEmpty()) 。 这是开源的优势之一 可以根据需要调整或修复代码。 CLAJR允许以反射方式访问以单个下划线命名的方法。 此-方法对应于一个或多个“ tail”参数。 在本示例中我没有使用它但是有趣的是这在JDK 9中不起作用因为在JDK 9中不允许使用单个下划线作为标识符。实际上JDK 8的javac现在就对此发出警告如下所示。下一个屏幕快照。 在选择框架或库来帮助Java进行命令行解析时需要考虑CLAJR的一些其他特征。 CLAJR是开源的并获得了GNU通用通用公共许可证 2.1或更高版本的许可 。 CLAJR是供下载作为包含单个文件CLAJR-0.9.java称为CLAJR-0.9-src.zip大约11 KB的zip文件。 CLAJR 0.9不需要下载任何第三方库。 CLAJR已经存在了一段时间但似乎已经有几年没有更新了。 我必须对源代码进行微小的更改以使其对我来说正常工作。 CLAJR是基于Java的命令行处理库其主要用途是通过使用反射与本系列中介绍的其他库区分开。 反射用于定义预期的命令行参数以及与这些参数关联的帮助消息。 CLAJR提供了一些与Java命令行处理相关的独特思想和方法但这是一个过时的库。 其他资源 CLAJR主页 CLAJR在SourceForge上下载 翻译自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-12-clajr.html