apache commons cli 是 apache 下面的一個解析指令行輸入的工具包,該工具包還提供了自動生成輸出幫助文檔的功能。
apache commons cli 支援多種輸入參數格式,主要支援的格式有以下幾種:
posix(portable operating system interface of unix)中的參數形式,例如 tar -zxvf foo.tar.gz
gnu 中的長參數形式,例如 du --human-readable --max-depth=1
java 指令中的參數形式,例如 java -djava.net.usesystemproxies=true foo
短杠參數帶參數值的參數形式,例如 gcc -o2 foo.c
長杠參數不帶參數值的形式,例如 ant – projecthelp
cli 指令代碼實作
指令行程式處理流程相對比較簡單,主要流程為設定指令行參數 -> 解析輸入參數 -> 使用輸入的資料進行邏輯處理
每一條指令行都必須定義一組參數,它們被用來定義應用程式的接口。apache commons cli 使用 options 這個類來定義和設定參數,它是所有 option 執行個體的容器。在 cli 中,目前有兩種方式來建立 options,一種是通過構造函數,這是最普通也是最為大家所熟知的一種方式;另外一種方法是通過 options 中定義的工廠方式來實作。
cli 定義階段的目标結果就是建立 options 執行個體。
其中 addoption() 方法有三個參數,第一個參數設定這個 option 的單字元名字,第二個參數指明這個 option 是否需要輸入數值,第三個參數是對這個 option 的簡要描述。在這個代碼片段中,第一個參數隻是列出幫助檔案,不需要使用者輸入任何值,而第二個參數則是需要使用者輸入 http 的通信協定,是以這兩個 option 的第二個參數分别為 false 和 true
在解析階段中,通過指令行傳入應用程式的文本來進行處理。處理過程将根據在解析器的實作過程中定義的規則來進行。在 commandlineparser 類中定義的 parse 方法将用 cli 定義階段中産生的 options 執行個體和一組字元串作為輸入,并傳回解析後生成的 commandline。
cli 解析階段的目标結果就是建立 commandline 執行個體。
在詢問階段中,應用程式通過查詢 commandline,并通過其中的布爾參數和提供給應用程式的參數值來決定需要執行哪些程式分支。這個階段在使用者的代碼中實作,commandline 中的通路方法為使用者代碼提供了 cli 的詢問能力。
cli 詢問階段的目标結果就是将所有通過指令行以及處理參數過程中得到的文本資訊傳遞給使用者的代碼。