我在Java中进行命令行解析的系列的第四部分介绍了Commandline ,它被描述为 “用于解析命令行参数的Java库”,它“基于使用注释从命令行参数到对象的映射”。

像以前介绍的args4j和jbock一样, Commandline使用注释来提供潜在命令行选项的“定义”。 然而,虽然args4j通过注释做到这一点的类字段和jbock通过在构造函数及其参数注解做到这一点,命令行使用的“集”(突变)方法的注释。 在本文中,我使用Main类示例,如之前有关基于Java的命令行处理的文章中所述,但是在正常情况下,我通常更喜欢使用一个特殊的类来表示命令行参数。

下面的代码清单演示了如何在“ get”方法上使用Commandline批注,以实现Commandline命令行处理的“ definition”阶段。

命令行处理的命令行“定义”阶段

public class Main
{/** Is verbosity enabled? */private boolean verbose;/** Name/path of applicable file. */private String fileName;@Option@ShortSwitch("v")@LongSwitch("verbose")@Toggle(true)public void setVerbose(final boolean newVerbose){verbose = newVerbose;}@Option@ShortSwitch("f")@LongSwitch("file")@SingleArgument@Requiredpublic void setFileName(final String newFileName){fileName = newFileName;}

上面的代码清单显示了命令行注释@Option以及自定义已定义选项的其他注释的使用(对于短和长参数, @Required @ShortSwitch@LongSwitch ;对于强制参数, @SingleArgument @Required用于指定与switch关联的一个参数的@SingleArgument ;以及@Toggle表示该开关的存在或不重要是重要的[没有与该开关关联的参数]。

下一个代码清单演示了使用Commandline进行命令行解析的“解析”和“询问”阶段。

使用命令行“解析”和“询问”

try
{// "Parsing" stage.final Main main = CommandLineParser.parse(Main.class, arguments, OptionStyle.LONG_OR_COMPACT);// "Interrogation" stage.out.println("You provided file name of '" + main.fileName+ "' and verbose is set to '" + main.verbose + "'.");
}
catch (IllegalAccessException | InstantiationException | InvocationTargetException exception)
{out.println("ERROR: Unable to parse command-line arguments: " + exception);
}

最后一个代码示例演示了使用单个CommandLineParser.parse(Class<T>, String[], OptionStyle)调用即可完成解析CommandLineParser.parse(Class<T>, String[], OptionStyle)并且查询与访问该方法返回的实例成员一样简单。 提供给parse方法的第三个参数很重要,因为它指示解析器如何期望显示开关。

刚刚显示的代码示例使用OptionStyle.LONG_OR_COMPACT ,该文档描述:“长开关以两个破折号开头。 短开关前面加一个破折号,可以连接成一个开关。” 相反, OptionStyle.SIMPLE指示解析器期望“所有开关必须是独立的”和“所有(长和短)开关都必须在命令行前加一个短划线。”

下一个屏幕快照演示了此简单的应用程序的实际操作。

如果未提供必需的参数,则会显示一条消息(包括堆栈跟踪),类似于下一个屏幕快照中所示。

我在此处不包括基于Commandline使用帮助或用法的示例,因为,如项目的GitHub页面所述,“生成帮助文本”是“当前不支持的功能”。

在选择库以帮助Java进行命令行分析时,需要考虑以下Commandline的其他特征。

  • Commandline是开源的,并根据Apache License Version 2.0获得许可 。
  • 当前版本的Commandline( 1.7.0 )至少需要Java SE 7 。
  • commandline-1.7.0.jar大小约为38 KB,并且不依赖于任何其他库。

命令行是Java开发人员可以使用的大量开源命令行处理库中​​的另一个,并且与其他几个命令行库一样,命令行使用注释来完成大部分繁重的工作。

其他参考

  • GitHub上的命令行
  • Maven Central上的命令行

翻译自: https://www.javacodegeeks.com/2017/06/java-command-line-interfaces-part-4-commandline.html

Java命令行界面(第4部分):命令行相关推荐

  1. java 启动 jetty_如何通过命令行启动或者关闭 Jetty 服务器

    https://my.oschina.net/bairrfhoinn/blog/82638 我亲爱的 Java 程序员朋友们,你们好,今天我想给大家分享壹个我遇到的问题以及解决它的方法.有人分配给我壹 ...

  2. java内存溢出排查jstack_Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

    项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大.因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查.监控的工具有很多种, 但是java自带的命令行监控 ...

  3. java运行class文件_java命令行下运行class文件

    今天碰到了一个很变态的问题,写了一个很简单的HelloWord.java,内容如下: package com.yanjiuyanjiu; public class HelloWorld { publi ...

  4. 从Java执行可执行的命令行

    在本文中,我们将介绍Java开发人员的常见需求. 从Java内部执行和管理外部流程. 由于这项任务很常见,因此我们着手寻找一个Java库来帮助我们完成它. 该库的要求是: 异步执行该过程. 能够中止流 ...

  5. android java调用参数,如何从命令行调用Android JNI函数并传递Java对象参数

    一.前言 当我们对某个使用原生库(native library)的恶意软件或者应用进行分析或渗透测试时,如果能够对库函数进行隔离和执行是再好不过的事情,这样做我们就可以使用其自身的代码来调试对抗恶意软 ...

  6. dos下编写java程序_在DOS命令行状态下,如果命令java Hello成功运行了程序,那么下面哪些叙述是正确的()...

    [判断题]在JDK命令行开发工具中,用编译程序javac.exe编译生成的文件是二进制可执行文件. [论述题]你认为堂吉诃德是一个怎样的人? [简答题]练习函数 [单选题]下列制度体现商法提高交易效率 ...

  7. java 引用 jar包_java命令行引用jar包的方法

    java命令行引用jar包的方法 java命令行怎么引用jar包?jar包有哪些常用方法?下面跟yjbys小编一起来学习一下,希望对大家学习java语言有帮助! 一般情况下: 如果java 文件和ja ...

  8. Java笔记2:使用命令行编译运行“Helloworld”

    //我用的是Windows10,eclipse MARS 版本,JAVA SE1.8 版本 //新建txt文档,Hello.txt //重命名文档,将文档重命名为Hello.java //Win+R, ...

  9. Java人机猜拳游戏(命令行版)

    这是本学期的java作业: java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 学了一个学期的Java,感觉收获还挺多的.第一次用Java写小 ...

  10. 【Java学习笔记】接收命令行参数输出指定个数的斐波那契数列

    /*斐波那契数列使用命令行输入参数 */ public class Fibonacci {public static void main(String[] args){if (args.length ...

最新文章

  1. 又一款Markdown组合神器!!!
  2. mysql拉荐_荐 一步一步教你MySQL主从复制读写分离
  3. delphi word类型_现在的女生喜欢什么类型的男生?|What Kind of Boys Do Girls Like?
  4. java求小数高精度_浅谈Java中的高精度整数和高精度小数
  5. JPG PNG GIF BMP图片格式的区别
  6. Linux第二次作业
  7. 洛谷T1967 货车运输 Kruskal最大生成树倍增LCA
  8. 打造运维大脑:翼支付高速发展背后,甜橙金融的云化智能演进
  9. 【python|opencv】cv2.imread返回None,无法正确读取图片
  10. python中格式化输出_python如何实现格式化输出
  11. svn 服务器端密码修改,svn服务器端设置密码
  12. Leetcode——495. Teemo Attacking
  13. Trunk详解(笔记)
  14. 七、训练自己的声学模型
  15. 把sn码转换为二维码
  16. Chrome 的哪些功能改变了我们浏览网页的方式?
  17. 庚子年 癸未月 癸亥日
  18. 扩展:hive插入数据到ES
  19. 学计算机开不了窍,对电脑一窍不通怎么学【零基础学电脑】
  20. Geant4学习之能谱输入

热门文章

  1. javafx之TableView的TableColumn
  2. Hibernate中使用Criteria查询及注解——(Dept.java)
  3. 防止properties乱码配置---SpringBoot
  4. linux下单点故障的软件,KeepAlived防止单点故障
  5. dismiss的词组_法律英语常用词必记:Dismiss
  6. 多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)
  7. nginx停止,平滑重启命令
  8. tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)
  9. java泛型程序设计——泛型类的静态上下文中类型变量无效+不能抛出或捕获泛型类的实例
  10. JavaScript 变量的作用域和生命周期