Apache Commons CLI 的使用
Commons CLI 简介
Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能。 Apache Commons CLI 支持多种输入参数格式,主要支持的格式有以下几种:
- POSIX(Portable Operating System Interface of Unix)中的参数形式,例如 tar -zxvf xx.tar
- GNU 中的长参数形式,例如 du –human-readable –max-depth=1
- Java 命令中的参数形式,例如 java -Djava.net.useSystemProxies=true Foo
- 短杠参数带参数值的参数形式,例如 gcc -O2 foo.c
- 长杠参数不带参数值的形式,例如 ant - projecthelp
使用
通常情况下命令行处理有三个步骤:定义、解析和处理阶段。
官方的ant示例
1 |
|
定义阶段
Apache Commons CLI使用Option表示每一个命令,使用Options封装多个Option。
定义 Options 代码片段
1
2
3
4
5
6
7
8// 创建 Options 对象
Options options = new Options();
// 添加 -h 参数,后面不需要输入数值
options.addOption("h", false, "Print this usage information");
// 添加 -c 参数,需要输入数值
options.addOption("c", "configfile", true, "input configfile");
HelpFormatter f = new HelpFormatter();
f.printHelp("example h", options );
输入结果会是:
1 |
|
其中 addOption() 三个参数的方法,第一个参数设定这个 option 的单字符名字,第二个参数指明这个 option 是否需要输入数值,第三个参数是对这个 option 的简要描述。
其中 addOption() 四个参数的方法,第一个和后两个与三个参数的方法含义一样。第二个参数是长参数名。
解析阶段
在解析阶段中,通过命令行传入应用程序的文本来进行处理。处理过程将根据在解析器的实现过程中定义的规则来进行。在 CommandLineParser 类中定义的 parse 方法将用 CLI 定义阶段中产生的 Options 实例和一组字符串作为输入,并返回解析后生成的 CommandLine。
解析 Options 代码片段:
1 |
|
处理阶段
在处理阶段中,应用程序通过查询 CommandLine,并通过其中的布尔参数和提供给应用程序的参数值来决定需要执行哪些程序分支。这个阶段在用户的代码中实现,CommandLine 中的访问方法为用户代码提供了 CLI 的询问能力。
CLI 处理阶段的目标结果就是将所有通过命令行以及处理参数过程中得到的文本信息传递给用户的代码。
1 |
|
如果用户设置了 c 参数,getOptionValue() 方法将获取用户设定的数值,如果没有指定该参数,getOptionValue() 方法将返回 null,应用程序会根据返回的数值来决定代码的运行。
总结
通过Commons CLI 可能方便的写出按标准解析参数的程序。特别是当参数很多时。
参考
https://commons.apache.org/proper/commons-cli/usage.html
https://www.ibm.com/developerworks/cn/java/j-lo-commonscli/