一、概述
Apache Commons CLI 庫提供API,可以幫助程序去解析傳遞給程序的命令行參數。它也可以打印幫助信息,來說明可以運用於命令行的有效參數。
CLI庫支持不同格式的選項:
- OSIX格式的選項(比如:tar -zxvf foo.tar.gz)
- GNU格式的長參數選項(比如:du --human-readable --max-depth=1)
- Java格式的屬性(比如:java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo)
- 帶值的單選項(比如:gcc -O2 foo.c)
- 單-號的長參數選項(比如:ant -projecthelp)
二、CLI 使用
<dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.4</version> </dependency>
/** * * org.apache.commons.cli.Options; * org.apache.commons.cli.Option * Option可以通過new生成,也可以通過Option.builder()構造生成。 * 該類是描述具體參數的基礎類,它有以下這些基礎屬性: * argName 字符串值, 參數值說明 * description 字符串值, 參數描述 * opt 字符串值, 短選項名, 比如:-p=22,p就是該短選項名 * longOpt 字符串值, 長選項類型;比如:-p=22 --port=22,port就是該長選項名 * numberOfArgs 整型, 參數個數 * optionalArg 布爾型, 是否可選 * required 布爾型, 是否必填 * type Class, 參數類型 * valuesep 字符型, 值分隔符;采用java參數風格解析時用來分支值,如:-Dkey=value。 * * org.apache.commons.cli.CommandLineParser; * org.apache.commons.cli.DefaultParser * org.apache.commons.cli.CommandLine * CommandLineParser.parse()的產物 * * org.apache.commons.cli.HelpFormatter * */ /**** * CLI 定義階段 * 目標:創建 Options 實例。 * addOption() 有幾個重載方法,下面使用到的方法有三個參數 * 第一個參數設定這個 option 的單字符名字 * 第二個參數指明這個 option 是否需要輸入數值 * 第三個參數是對這個 option 的簡要描述。 * ****/ // 創建 Options 對象 Options options = new Options(); // 添加 -h 參數 options.addOption("h", "help", false, "Lists short help"); // 添加 -c 參數 options.addOption("c", "configFile", true, "Name server config properties file"); // 添加 -p 參數 options.addOption("p", "printConfigItem", false, "Print all config item"); /**** * CLI 解析階段 * 目標:創建 CommandLine 實例。 * 說明:在解析階段中,通過命令行傳入應用程序的文本來進行處理。 * 處理過程將根據在解析器的實現過程中定義的規則來進行。 * 在 CommandLineParser 類中定義的 parse 方法將用 CLI 定義階段中產生的 Options * 實例和一組字符串作為輸入,並返回解析后生成的 CommandLine。 * CLI 詢問階段 * 目標:將所有通過命令行以及處理參數過程中得到的文本信息傳遞給用戶的代碼。 * 說明:在詢問階段中,應用程序通過查詢 CommandLine,並通過其中的布爾參數和提供給 * 應用程序的參數值來決定需要執行哪些程序分支。這個階段在用戶的代碼中實現, * CommandLine 中的訪問方法為用戶代碼提供了 CLI 的詢問能力。 * * ****/ CommandLineParser parser = new DefaultParser(); String[] args = { "-h", "-c", "config.xml" }; CommandLine cmd = parser.parse(options, args); HelpFormatter hf = new HelpFormatter(); hf.setWidth(110); if(cmd.hasOption("h")) { // 這里顯示簡短的幫助信息 hf.printHelp("testApp", options, true); // 打印opts的名稱和值 System.out.println("--------------------------------------"); Option[] opts = cmd.getOptions(); if (opts != null) { for (Option opt1 : opts) { String name = opt1.getLongOpt(); String value = cmd.getOptionValue(name); System.out.println(name + "=>" + value); } } }