新建command命令行

如果在java项目中希望使用命令行来进行某些操作,可以仿照如下示例。


首先需要定义一系列的Options,如下我们定义了getOptions()方法   
  private static Options getOptions() {
        Options opts = new Options();
        opts.addOption(buildOption("b", "beanName", true, "bean in xml with configure", true));
        opts.addOption("a", "all", false, "if all or not, increment if this param escape");
        opts.addOption("n", "ignore", false, "get all when token file not exist or empty, " +
                "throw exception if this param escape and token file not exist or empty");
        opts.addOption("h", "help", false, "print help");
        return opts;
 }

//如上其实调用了Options.addOption(Option option); 和 Options.addOption(String opt, String longOpt, boolean hasArg, String description)两个方法

如下是API中的方法注释:   

/**
     * Add an option that contains a short-name and a long-name.
     * It may be specified as requiring an argument.
     *
     * @param opt Short single-character name of the option.
     * @param longOpt Long multi-character name of the option.
     * @param hasArg flag signally if an argument is required after this option
     * @param description Self-documenting description
     * @return the resulting Options instance
     */
    public Options addOption(String opt, String longOpt, boolean hasArg, String description)
    {
        addOption(new Option(opt, longOpt, hasArg, description));

        return this;
    }

同时,在类中定义了buildOption方法

    protected static Option buildOption(String opt, String longOpt, boolean hasArg, String description, boolean isRequired) {
        Option option = new Option(opt,longOpt,hasArg,description);
        option.setRequired(isRequired);
        return option;
    }

其实,也就是设置了option是required的。


在这之后,我调用了parseArgs(Options options, String[] args)方法来对输入的args命令解析,生成CommandLine实例

注意这里的parseArgs方法实际上是调用如下部分方法(绿底红字):

    private static final CommandLineParser parser = new PosixParser();

    public static CommandLine parseArgs(Options options, String []args) throws ParseException{
        return parser.parse(options, args);
    }


//这里才是真正的解析命令并执行操作的代码

public static void main(String[] args) {
        Options opts = getOptions();

        CommandLine commandline = null;
        try {
            commandline = parseArgs(opts, args);
        } catch (ParseException e) {
            printHelper(RoomImporterCommand.class.getSimpleName(), opts);
            return;
        }
       

     //根据commandline中的参数值,给方法中的某些标志位设置不同的值。  

        String beanName = commandline.getOptionValue('b');

     boolean allSign = false;
        if(commandline.hasOption('a')){
            allSign = true;
        }
        
        boolean ignore = false;
        if(commandline.hasOption('n')){
            ignore = true;
        }

       

      //根据上面生成的标志位的值,执行相关的操作,这里也就是实例化了一个classA,并调用了它的execute()方法。
       ClassA classA = new ClassA(beanName, allSign, ignore);
        
        System.exit(classA.execute());
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值