java登录界面命令

第十二篇有关在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的步骤(我必须对源文件进行一些更改,该更改将在本文后面描述):

  1. 从SourceForge 下载 CLAJR-0.9-src.zip
  2. 解压缩CLAJR-0.9-src.zip以解压缩CLAJR-0.9.java
  3. 创建目录clajr来表示Java源类应存在于其中的Java clajr包。
  4. CLAJR-0.9.java文件移动到clajr目录,并将其重命名为CLAJR.java以匹配该源文件中的类的名称。
    • 我还必须编辑源代码以进行较小的更改。 这将在后面的文章中详细讨论。
  5. 使用javacCLAJR.java文件编译为多个类文件。
  6. 使用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

java登录界面命令

java登录界面命令_Java命令行界面(第12部分):CLAJR相关推荐

  1. java登录界面命令_Java命令行界面(第13部分):JArgs

    java登录界面命令 JArgs 1.0的区别在于,这是我的第13篇文章的主题,该文章是关于Java命令行参数解析的. JArgs是一个开放源代码( BSD许可 )库,主要由Steve Purcell ...

  2. java登录界面命令_Java命令行界面(第18部分):JCLAP

    java登录界面命令 Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库. 这篇文章的示例基于JCLAP 1.4 , ...

  3. java登录界面命令_Java命令行界面(第10部分):picocli

    java登录界面命令 picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个单文件Java框架,用于解析命令行参数并生成 ...

  4. java登录界面命令_Java命令行界面(第7部分):JCommander

    java登录界面命令 这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库. 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高, ...

  5. java登录界面命令_Java命令行界面(第8部分):Argparse4j

    java登录界面命令 Argparse4j是" Java命令行参数解析器库",其主页将其描述为"基于Python的argparse模块的Java命令行参数解析器库&quo ...

  6. java登录界面命令_Java命令行界面(第26部分):CmdOption

    java登录界面命令 由于Tweet,我了解了本系列中第26个基于Java的功能强大的库,该库用于解析命令行参数 . CmdOption在其GitHub主页上被描述为"一个通过注释配置的,用 ...

  7. java登录界面命令_Java命令行界面(第11部分):CmdLn

    java登录界面命令 这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn(Java命令行解析器)来处理基于Java的应用程序中的命令行参数. Ost ...

  8. java登录界面命令_Java命令行界面(第15部分):Jargo

    java登录界面命令 Jargo在其GitHub主页上定义为"一种减轻程序参数/选项处理的工具". 当已经存在许多其他命令行处理库时,该页面为另一个命令行处理库提供了基本原理 ,该 ...

  9. java登录界面命令_Java命令行界面(第16部分):JArgp

    java登录界面命令 这篇文章中介绍的基于Java的命令行参数处理库是IBM developerWorks文章Java编程动态性,第3部分,应用的反射 (第2003 部分,此归档文章于2016年&qu ...

最新文章

  1. 工程项目管理丁士昭第二版_2021年软考系统集成项目管理工程师知识点预习第十四章第二节...
  2. vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例
  3. Java开发技巧——并发控制中的乐观锁与悲观锁
  4. [整理+原创]ubuntu Thunderbird Mail设置自动提醒
  5. c语言 printf_C语言(4) 屏幕输出指令printf
  6. cad截图软件_AutoCAD电气制图协会线上CAD学习打卡活动结束
  7. 矩池云上cifar10使用说明
  8. Rust: Vec用法及其它
  9. 【裴礼文数学分析】例1.1.2
  10. 手把手写深度学习(3)——用RNN循环神经网络自动生成歌词之理论篇
  11. java中长整形怎么定义_java中长整型定义
  12. 人工智能产业链的三个核心,底层硬件、通用AI技术及平台、应用领域相关公司盘点
  13. 前端项目 - 论坛信息管理系统(纯页面)
  14. python网络编程内容_图解Python网络编程
  15. cc笔记_web测试用例
  16. 笔记本电脑硬盘不见了_笔记本电脑找不到硬盘原因及解决方法
  17. 原生m1/m2 Sketch v90 for Mac最新中文版Sketch已更新,已解决闪退打不开问题
  18. thinkpad x12018换固态_终极之后是否还有究极?ThinkPad X1 Carbon 2018评测
  19. 24 张图总结 TCP 基础知识,看完我飘了。
  20. CVPR2022-SemanticStyleGAN

热门文章

  1. 多项式乘法:练习总结
  2. 动态规划:openjudge 2.6-3532 最大上升子序列和 解题心得
  3. YbtOJ-染色计划【树链剖分,线段树,tarjan】
  4. UOJ#84-[UR #7]水题走四方【dp】
  5. P4322-[JSOI2016]最佳团体【0/1分数规划,树形背包】
  6. jzoj6804-NOIP2020.9.26模拟jerry【dp】
  7. nssl1511-我的世界【堆,贪心】
  8. 洛谷UVA1328,POJ1961-Period【KMP,字符串】
  9. 【深搜】骑士游历(ssl 1277)
  10. Javafx的WebEngine的url加载不输出结果坑,gc回收了局部变量