时海君:apache第一讲-commons cli

hello, 大家好,我是时海君,时海君就是我,一个自认为智商偏高,情商偏低的程序员。纵使程序虐我千百遍,我待IT如初恋。从今往后看破红尘,两耳不闻窗外事,一心只写圣贤代码。时海君这些年在java后台开发、大数据领域颇有些经验,从今天起带大家走进java企业级应用。

    搞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

猜你喜欢

转载自blog.csdn.net/wodwl/article/details/53148422
CLI