Commons CLI 教程

Commons Cli 使用属性选项

该示例将演示怎样使用 Commons Cli 定义属性(properties)类型的选项。定义属性选项方法如下:

Option property2 = new Option("C", "use value for given property(property=value)");
// 设置参数值的显示名称
property2.setArgName("键=值");
// 设置此选项可以采用的参数值数量
property2.setArgs(2);
// 设置值分隔符。例如:如果参数值为 Java 属性,则值分隔符将为“=”
property2.setValueSeparator('=');
// 设置此选项是否是必需的
property2.setRequired(true);

options.addOption(property2);

程序运行方式:

$ java Demo4 -Dk1=v1 -Dk2=v2 -Ck3=v3

示例代码:

package com.hxstrive.cli;

import org.apache.commons.cli.*;
import java.util.Properties;

/**
* 使用 Commons CLI 定义 properties 类型的选项
*
* @author hxstrive.com
*/
public class Demo4 {

   public static void main(String[] args) throws Exception {
       // 模拟参数
       args = new String[]{
               "-Dclasspath=.;%java_home%/lib",
               "-Dbasepath=D:/data",
               "-Dcatalina_base=D:/apache-tomcat-7.0.64",
               "-Cmodel=dev"
       };

       //====================================
       // 定义一个选项
       // 此种方式已经不推荐使用
       //====================================
       Options options = new Options();
       Option property = OptionBuilder.withArgName("property=value").hasArgs(2)
               .withValueSeparator()
               .withDescription("use value for given property(property=value)").create("D");
       property.setRequired(true);
       options.addOption(property);

       //====================================
       // 推荐方式
       //====================================
       Option property2 = new Option("C",
               "use value for given property(property=value)");
       // 设置参数值的显示名称
       property2.setArgName("键=值");
       // 设置此选项可以采用的参数值数量
       property2.setArgs(2);
       // 设置值分隔符。例如:如果参数值为 Java 属性,则值分隔符将为“=”
       property2.setValueSeparator('=');
       // 设置此选项是否是必需的
       property2.setRequired(true);
       options.addOption(property2);

       //====================================
       // 输出帮助信息
       //====================================
       HelpFormatter formatter = new HelpFormatter();
       formatter.printHelp("Demo", options);

       // 解析命令行
       CommandLineParser lineParser = new DefaultParser();
       CommandLine commandLine = lineParser.parse(options, args);
       if(commandLine.hasOption("D")) {
           System.out.println("[D]");
           Properties properties = commandLine.getOptionProperties("D");
           for (Object key : properties.keySet()) {
               System.out.println(key + "=" + properties.get(key));
           }
       } else {
           System.out.println("没有指定 -D 参数");
       }

       if(commandLine.hasOption("C")) {
           System.out.println("[C]");
           Properties properties = commandLine.getOptionProperties("C");
           for(Object key : properties.keySet()) {
               System.out.println(key + "=" + properties.get(key));
           }
       } else {
           System.out.println("没有指定 -C 参数");
       }
   }

}

运行程序,输出如下:

$ java Demo4
usage: Demo
-C <键=值>              use value for given property(property=value)
-D <property=value>   use value for given property(property=value)
[D]
basepath=D:/data
classpath=.;%java_home%/lib
catalina_base=D:/apache-tomcat-7.0.64
[C]
model=dev
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号