搞java开发的应该都听过apache社区,如果你没有听过千万别说认识时海君。apache 是IT行业鼎鼎有名的开源社区,该社区托管孵化了当前赫赫有名的项目:hadoop、spark、kafka、lucene等等。可以说计算机发展的如此迅速,尤其是时下如火如荼的大数据领域,apache社区功不可没 。
好了废话少说,以后时海君会带大家一起探索it行业各种有趣的话题(更多交流qq群::476031035),今天是第一讲,请大家多多支持。
apache第一讲-commons cli
apache commons-cli 是一个命令行参数解析工具,支持多种风格命令行参数的解析,能够生成优雅的帮助信息。可以说是编写命令行工具的必备神器。想想自己花了很多精力写了一个很NB的软件,结果在展示给自己团队或客户面前时因为很难用,大家不买账是不是非常憋屈,相反,有的人只做了一个很简单的工具,但是非常好用,帮助信息也很详细,对比一下是不是心里更憋屈。所以时海君认为:软件核心功能固然重要,但是对软件的包装也很重要,这些花哨的东西(如帮助信息、文档)才是你成果的展现,请记住不要让你的成果闷死在大脑里。
今天我们的主角commons-cli就是这样一个对核心功能进行包装展示的工具类api,实战应用场景包括Ant, Hadoop等。
commons-cli 支持以下风格的命令行参数解析:
POSIX 风格 如: tar -zxvf foo.tar.gz
GNU 长参数风格: du --human-readable --max-depth=1
Java 属性风格: java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo
短杠带参数值风格: ie. gcc -O2 foo.c
长杠不带值风格: ant -projecthelp
通过apache commons cli 能够打印类似如下优雅的帮助信息
usage: ls
-A,--almost-all do not list implied . and ..
-a,--all do not hide entries starting with .
-B,--ignore-backups do not list implied entried ending with ~
-b,--escape print octal escapes for nongraphic characters
--block-size <SIZE> use SIZE-byte blocks
-c with -lt: sort by, and show, ctime (time of last
modification of file status information) with
-l:show ctime and sort by name otherwise: sort
by ctime
-C list entries by columns
示例:
代码位置:https://github.com/k6k4com/examples-apache-commons/tree/master/commons-cli
package com.k6k4.examples.apache.commons.cli;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
/**
* Created by k6k4 on 16/10/29.
*/
public class CliExample {
public static void main(String[] args) throws ParseException {
Options options = new Options();
options.addOption("a", false, "hello a");
options.addOption("b", true, "hello b");
options.addOption("c", "c-long", false, "hello c");
options.addOption("d", "d-long", true, "hello d");
Option e = OptionBuilder.withArgName("eArg")
.hasArg()
.withDescription("hello e")
.create("e");
Option f = OptionBuilder.withArgName("key=value")
.hasArgs(2)
.withValueSeparator()
.withDescription("hello f")
.create("f");
options.addOption(e);
options.addOption(f);
args = new String[]{"-a", "-b", "bValue", "--c-long", "-d", "dValue", "-fKey=fValue"};
handle(options, args);
}
public static void handle(Options options, String[] args) throws ParseException {
CommandLineParser parser = new DefaultParser();
CommandLine cl = parser.parse(options, args);
HelpFormatter hf = new HelpFormatter();
hf.printHelp("Help Message", options);
if (cl.hasOption("a")) {
System.out.println("-a");
}
if (cl.hasOption("b")) {
System.out.println("-b:" + cl.getOptionValue("b"));
}
if (cl.hasOption("c-long")) {
System.out.println("--c-long");
}
System.out.println("--d-long:" + cl.getOptionValue("d-long", "dValueDefault"));
System.out.println("-e:" + cl.getOptionValue("e", "eValueDefault"));
if (cl.hasOption("f")) {
System.out.println("-f:" + cl.getOptionValue("f"));
}
}
}
欢迎加入: java企业级应用交流qq群(476031035)
欢迎转载: 转载请注明作者 时海君,及来源 http://blog.csdn.net/wodwl/article/details/53148422