Java命令行界面(第2部分):args4j
在上一篇文章中 ,我研究了如何使用Apache Commons CLI在Java應用程序中解析命令行參數(shù)。 在本文中,我將使用另一個庫args4j進行相同的操作。
args4j采用了一種不同于Commons CLI的方式來指定Java應用程序應期望的命令行參數(shù)。 盡管Commons CLI期望代表選項的對象將被單獨且顯式實例化,但args4j使用自定義注釋來促進命令行參數(shù)處理的這一“定義”階段。 命令行選項應該是類上的實例級字段,并帶有@ org.kohsuke.args4j.Option批注。 每個命令行參數(shù)的特征都包含在此@Option注釋的屬性中。
本文中演示的簡單應用程序與我上一篇文章中使用的應用程序相似,并著重于用于指定詳細程度的可選且無值的-v選項,以及所需的-f選項,該選項期望代表文件路徑和名稱的值。 下一個代碼清單演示了如何使用args4j的@Option注釋將這些命令行參數(shù)設置為類數(shù)據(jù)成員上的注釋。
args4j通過@Option注釋定義命令行參數(shù)
@Option(name="-v", aliases="--verbose", usage="Print verbose status.") private boolean verbose;@Option(name="-f", aliases="--file", usage="Fully qualified path and name of file.", required=true) private String fileName;如上面的代碼清單所示,很容易指定選項的名稱,用法以及是否需要(默認是可選的)。 上面的private修飾符的存在使它們很明顯是在類級別定義的屬性。 因為沒有static修飾符,所以我們看到這些是已注釋的實例變量。
要解析命令行選項,只需實例化一個CmdLineParser并將命令行參數(shù)傳遞給其parseArguments(String ...)方法:
解析args4j中的命令行參數(shù)
final CmdLineParser parser = new CmdLineParser(this); try {parser.parseArgument(arguments); } catch (CmdLineException clEx) {out.println("ERROR: Unable to parse command-line options: " + clEx); }在剛剛顯示的Java代碼的第一行中, this是對類實例的引用,在該類實例中定義了上面顯示的成員變量并使用@Option注釋@Option注釋。 在這種情況下,我使用this是因為定義這些選項的同一類是調用此解析方法的類。 為了在同一個類中執(zhí)行此操作,我需要在類中定義一個名為doMain的實例(非static )方法,并由該類的main函數(shù)調用該方法(這在本文結尾處的完整代碼清單中顯示)。 從類的main(final String[])函數(shù)接收的命令行參數(shù)是傳遞給parseArguments(String[])方法的parseArguments(String[])數(shù)組。
接下來的兩個屏幕快照演示了基于args4j的上述代碼在解析命令行參數(shù)中的應用。 第一張圖片顯示了兩個選項的短選項和長選項的組合。 第二個圖像顯示了自動報告未提供必需的命令行參數(shù)的情況。
命令行解析庫的一個重要功能是能夠顯示用法或幫助信息。 下一個代碼清單演示了使用args4j的CmdLineParser.printUsage(OutputStream)方法執(zhí)行此操作的示例。
使用args4j打印使用情況信息
final CmdLineParser parser = new CmdLineParser(this); if (arguments.length < 1) {parser.printUsage(out);System.exit(-1); }下一個屏幕快照描述了args4j默認打印出的使用情況信息。
這篇文章演示了如何使用arg4j實現(xiàn)與Java應用程序中的命令行解析有關的一些最常見功能,包括選項“定義”,命令行參數(shù)“解析”,對所解析的命令行參數(shù)的“詢問”以及幫助/ us與命令行參數(shù)有關的詳細信息。 現(xiàn)在顯示了上面在代碼清單中部分表示的類的完整代碼清單。
args4j演示Main.java的完整代碼清單
package examples.dustin.commandline.args4j;import static java.lang.System.out;import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.Option;import java.io.IOException;/*** Demonstrate args4j.*/ public class Main {@Option(name="-v", aliases="--verbose", usage="Print verbose status.")private boolean verbose;@Option(name="-f", aliases="--file", usage="Fully qualified path and name of file.", required=true)private String fileName;private void doMain(final String[] arguments) throws IOException{final CmdLineParser parser = new CmdLineParser(this);if (arguments.length < 1){parser.printUsage(out);System.exit(-1);}try{parser.parseArgument(arguments);}catch (CmdLineException clEx){out.println("ERROR: Unable to parse command-line options: " + clEx);}out.println("The file '" + fileName + "' was provided and verbosity is set to '" + verbose + "'.");}/*** Executable function demonstrating Args4j command-line processing.** @param arguments Command-line arguments to be processed with Args4j.*/public static void main(final String[] arguments){final Main instance = new Main();try{instance.doMain(arguments);}catch (IOException ioEx){out.println("ERROR: I/O Exception encountered: " + ioEx);}} }這是在選擇框架或庫來幫助Java進行命令行解析時要考慮的args4j的一些其他特征。
- args4j是開放源代碼,并已獲得MIT許可證 。
- 當前版本的args4j( 2.33 ) 需要 J2SE 5 。
- args4j不需要單獨下載或引用任何第三方庫。
- args4j 2.33主JAR( args4j-2.33.jar )的大小約為152 KB。
- Maven存儲庫顯示了376個對args4j的依賴關系 ,包括OpenJDK的JMH Core和Jenkins (考慮到川口晃介的參與,這不足為奇)。
- args4j已經(jīng)存在了一段時間; 其2.0.3版本于2006年1月發(fā)布 ,至少從2003年開始就以某種形式出現(xiàn)。
- args4j允許通過@Option注釋上的“ hidden ”將命令行參數(shù)從使用情況輸出中排除。
- args4j允許指定和強制執(zhí)行命令行參數(shù)之間的關系。 這包括指定何時不能同時提供兩個參數(shù)的能力(“ 禁止 ”),以及僅當還提供了另一個參數(shù)時(“ depends ”)才有意義的情況。
- args4j支持在有限的一組值適用于該選項的情況下使用枚舉類型的類屬性。 @Option文檔在“枚舉開關”部分下說明了如何執(zhí)行此操作。
- args4j通過其OptionHandler類提供了命令行參數(shù)解析的可擴展性和可定制性。
args4j庫易于使用,并允許高度可讀的代碼。 決定是否使用args4j時,最大的考慮因素可能是確定使用批注指定命令行參數(shù)定義的舒適程度。
其他參考
- args4j
- args4j下載
- args4j源代碼 (GitHub)
- args4j API文檔
- args4j樣本主
翻譯自: https://www.javacodegeeks.com/2017/06/java-command-line-interfaces-part-2-args4j.html
總結
以上是生活随笔為你收集整理的Java命令行界面(第2部分):args4j的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如皋市商品房备案查询网(如皋市商品房备案
- 下一篇: ddos攻击会怎么样(ddos会攻击什么