參考地址 http://commons.apache.org/proper/commons-cli/usage.html
Apache Commons CLI 提供了一套 API 用于解析命令行選項迈嘹,同時也可以打印各命令行選項說明全庸。
Commons CLI supports different types of options:
- POSIX like options (ie.
tar -zxvf foo.tar.gz
) - GNU like long options (ie.
du --human-readable --max-depth=1
) - Java like properties (ie.
java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo
) - Short options with value attached (ie.
gcc -O2 foo.c
) - long options with single hyphen (ie.
ant -projecthelp
)
下面是一個在 java 中使用的例子
private static Config parseCmdLine(String[] args) {
// 定義一個可選選項集
Options options = new Options();
// 添加一個選項 c 壶笼,并加上對應(yīng)的簡短說明,第二個參數(shù)表明這個選項是否跟有參數(shù)
options.addOption("c", true, "configOpt file, default path is ./ssdb.cfg");
// 定義一個選項組保礼,這個組限定其所包含的選項是互斥的
OptionGroup optionGroup = new OptionGroup();
// 這里的 Option 方法只有兩個參數(shù)责语,表明這個命令行選項不帶參數(shù)
optionGroup.addOption(new Option("rm", "remove K/V from ssdb"));
optionGroup.addOption(new Option("disable", "disable K/V from ssdb with data remained"));
optionGroup.addOption(new Option("get", "get value from ssdb"));
optionGroup.addOption(new Option("mv", "mv from new client to old"));
// 設(shè)定此選項組是必選的,從而實現(xiàn)上面 4 個選項必須且只能選擇一個
optionGroup.setRequired(true);
options.addOptionGroup(optionGroup);
// 初始化一個命令行解析器胁赢,一般用默認(rèn)的就可以
CommandLineParser parser = new DefaultParser();
Config config = new Config();
try {
// 解析后會得到一個 CommandLine 對象
CommandLine cmd = parser.parse(options, args);
config = new Config();
// 獲取選項 -c 的參數(shù)值智末,如果沒有則使用第二個參數(shù)所指定的默認(rèn)值
config.ssdbConfigPath = cmd.getOptionValue("c", "./ssdb.cfg");
// 判斷選項 -rm 是否存在徒河,返回的是 boolean 值
if (cmd.hasOption("rm")) {
config.operation = Operation.rm;
}
else if (cmd.hasOption("disable")) {
config.operation = Operation.disable;
}
else if (cmd.hasOption("get")) {
config.operation = Operation.get;
}
else if (cmd.hasOption("mv")) {
config.operation = Operation.mv;
}
else {
config.operation = Operation.unknown;
}
} catch (ParseException e) {
System.out.println(e.getMessage());
// 解析失敗是用 HelpFormatter 打印 幫助信息
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(
"java ssdb-del-helper-1.0-SNAPSHOT-jar-with-dependencies.jar",
options);
}
return config;
}
private static class Config {
String ssdbConfigPath;
Operation operation = Operation.unknown;
}
另 groovy 默認(rèn)包含了 Apache Commons CLI顽照,所以在 groovy 中默認(rèn)就可以使用這套工具,并且 groovy 提供了一個內(nèi)置的 DSL 來更方便地使用這個。