Java命令行界面(第13部分):JArgs
JArgs 1.0的區別在于,這是我的第13篇文章的主題,該文章是關于Java命令行參數解析的。 JArgs是一個開放源代碼( BSD許可證 )庫,主要由Steve Purcell和Ewan Mellor等 不同的貢獻者支持。 事實證明,這在第一次使用JArgs時可能會引起一些困惑,因為程序包名稱和其他詳細信息會根據您應用的JArgs版本而變化。
JArgs項目頁面將JArgs描述為“供Java程序員使用的便捷,緊湊,預先打包并有詳細文檔的命令行選項解析器套件?!?該頁面斷言,可能會選擇JArgs而不是其他基于Java的命令行處理庫,因為JArgs“易于使用,經過全面測試,有據可查并獲得了廣泛的許可(BSD許可,因此沒有GNU混亂)”。 該頁面還指出:“該軟件包很小,沒有多余的裝飾,但是功能齊全,并且包含已投入生產使用相當一段時間的代碼?!?
JArgs確實很小。 jargs-1.0.zip文件的大小不足200 KB,而提取的核心jargs.jar僅約12 KB。 沒有第三方庫依賴項。 以下屏幕快照演示了從SourceForge下載的jargs.jar的內容( Maven存儲庫上可用的jargs-1.0.jar 與此類似)。
對于JArgs文檔包括其主要Javadoc生成API文檔和代碼示例如OptionTest和CustomOptionTest 。
使用JArgs時,使用的主要類是CmdLineParser ( jargs.gnu.CmdLineParser或com.sanityinc.jargs.CmdLineParser取決于您在何處獲得JArgs的發行版以及所獲得的版本)。 如果使用通過SourceForge下載或通過Maven存儲庫 提供的JArgs JAR,則將使用的主要類是jargs.gnu.CmdLineParser 。 另一方面,如果您從GitHub(purcell / jargs)上的可用源構建JArgs,則主類將為com.sanityinc.jargs.CmdLineParser 。 無論哪種情況,都只有一個CmdLineParser外部類,并且它使用嵌套類來提供額外的支持。 在本文中,我將使用jargs.gnu.CmdLineParser演示基于SourceForge / Maven JAR的jargs.gnu.CmdLineParser 。 我的示例的完整源代碼將發布在GitHub上,并且可能會對該版本進行編輯,以利用更明確的導入來提高代碼的簡潔性和可讀性。
JArgs很小,因此令人驚訝地很簡單。 它沒有提供很多精美的功能,但是它確實使用不使用注釋或反射的簡單編程方法來進行基本的命令行參數處理。
為了實現使用JArgs解析命令行參數的“定義”階段,需要實例化CmdLineParser類的實例,并為每個預期的命令行選項在該實例上調用addOption(CmdLineParser.Option)方法 。 每個選項都由擴展CmdLineParser.Option類的類的實例表示。 在本系列的示例中,我一直在使用基于字符串的文件路徑/名稱選項和基于布爾的詳細選項。 因此,在將JArgs用于這些示例時,可以將CmdLineParser.Option.StringOption類用于文件路徑和名稱,將CmdLineParser.Option.BooleanOption類用于詳細選項。 下一個代碼清單演示了使用JArgs實現“定義”階段的過程。
JArgs的“定義”階段
public static void main(final String[] arguments) {final CmdLineParser cmdLineParser = new CmdLineParser();final CmdLineParser.Option fileOption = new CmdLineParser.Option.StringOption('f', "file");cmdLineParser.addOption(fileOption);final CmdLineParser.Option verbosityOption = new CmdLineParser.Option.BooleanOption('v', "verbose");cmdLineParser.addOption(verbosityOption);使用JArgs進行“解析”僅需要一條語句,但是您確實需要捕獲CmdLineParser.parse(String [])方法引發的兩個檢查的異常,或者明確聲明這些異常是從使用method調用的代碼中引發的。 這顯示在下一個代碼清單中。
JArgs的“解析”階段
try {cmdLineParser.parse(arguments); } catch (CmdLineParser.IllegalOptionValueException | CmdLineParser.UnknownOptionException exception) {out.println("Unable to parse command line options - " + exception);System.exit(-1); }當剛剛顯示的代碼成功執行(沒有引發兩個檢查的異常之一)時,在其上調用parse(String[])方法的CmdLineParser實例現在包含為預期的命令行選項分析的值,因此我們準備“審訊”該實例。
JArgs命令行選項處理的“詢問”階段使用前面討論的CmdLineParser.Option -extended類上的方法來檢索為每個選項解析的值。 CmdLineParser.getOptionValue()方法的重載版本用于執行此詢問。 如果未找到或解析選項,則僅接受需要其值的Option實例的方法[ getOptionValue(CmdLineParser.Option) ]返回null 。 如果未找到或解析該選項,則接受需要其值的Option實例和第二個“默認”對象[ getOptionValue(CmdLineParser.Option,Object) ]的方法將返回提供的默認對象。 在下面的代碼清單中,我在兩種情況下都使用了第二種形式,因此確保不必處理null 。
JArgs的“審訊”階段
final String filePathName = cmdLineParser.getOptionValue(fileOption, "null").toString(); if (filePathName.equals("null")) {out.println("ERROR: File path/name must be provided.");System.exit(-2); } out.println("File path/name is " + filePathName+ " and verbosity is " + cmdLineParser.getOptionValue(verbosityOption, false)+ ".");有了這些基本代碼示例,下面的屏幕快照中演示了如何運行使用JArgs進行命令行處理的簡單Java應用程序。
CmdLineParser類不附帶任何內置的幫助/用法支持。 然而,在SourceForge上jargs-1.0.zip提供包括源代碼AutoHelpParser ,延伸類CmdLineParser和顯示幫助/用法中如何實現。
由于它已經過時并且很簡單,因此與本系列中討論的其他一些基于Java的命令行解析庫相比,JArgs可能可以與Java的較舊版本一起使用。 當我在Maven提供的jargs-1.0.jar和SourceForge提供的jargs.jar中的CmdLineParser上運行javap以確定使用它編譯的Java版本時,我看到它的主要版本為45 ! 正如我在“以編程方式確定Java類的JDK編譯版本”一文中所寫的那樣,主要版本為45表示該代碼是使用JDK 1.1編譯的!
Maven提供的jargs-1.0.jar版本信息(來自javap)
Classfile jar:file:/C:/lib/jargs-1.0/lib/jargs-1.0.jar!/jargs/gnu/CmdLineParser.classLast modified Apr 9, 2005; size 6032 bytesMD5 checksum b2d61c0ce786f8a661cccf1e61de2a19Compiled from "CmdLineParser.java" public class jargs.gnu.CmdLineParserminor version: 3major version: 45SourceForge提供的jargs.jar版本信息(來自javap)
Classfile jar:file:/C:/lib/jargs-1.0/lib/jargs.jar!/jargs/gnu/CmdLineParser.classLast modified Apr 9, 2005; size 6032 bytesMD5 checksum b2d61c0ce786f8a661cccf1e61de2a19Compiled from "CmdLineParser.java" public class jargs.gnu.CmdLineParserminor version: 3major version: 45這是在選擇框架或庫以幫助Java進行命令行解析時要考慮的JArgs的特征。
- JArgs是開源的,并獲得BSD許可證的許可。
- 對于JArgs的版本和主要貢獻者似乎有些困惑, Maven和SourceForge具有一個版本,而GitHub上的purcell / jargs具有另一個版本。
- JArgs既小又簡單: jargs.jar (或Maven上的jargs-1.0.jar )只有大約12 KB的大小,并且沒有第三方庫依賴項。
- JArgs使用程序化API來定義,解析和詢問選項,而不是使用注釋或反射。
- JArgs的日期有些過時,許多主頁都有“最新更新”,例如2005年。但是,本文中多次引用的GitHub頁面(其主類的包名稱不同)顯示了其最新更新。是2012年。
- 我認為JArgs可以與當今的絕大多數Java應用程序一起使用,因為在我看來,JArgs可以使用Java版本,甚至可以追溯到Java SE 1.1 。
一個可能不得不使用JArgs而不是其他一些更常用的和/或最近更新的基于Java的命令行處理的最令人信服的原因是它的簡單性和小巧的體積。 有時候我會面臨一個決定,即我想支持JArgs提供什么級別的命令行選項,而當我想要的不僅僅是直接解析傳入的String[]到主函數時,可能需要的庫。想要其他一些基于Java的命令行處理庫的強大功能和復雜性。 我對使用JArgs的最大擔心可能是它有一段時間沒有更新,并且可能會導致其他人使用我的工作并不得不處理JArgs的兩種不同表現形式,并且其主要類的包名稱不同(使用依賴的Maven在這里可能會很有幫助)。 JArgs既小又簡單,對于那些只希望最基本的命令行處理的人來說,它可能會找到自己的利基。
其他參考
- JArgs SourceForge頁面
- JArgs在SourceForge上下載
- Maven上的JArgs
- Ewan Mellor的頁面:“ JArgs:Java的命令行選項解析套件 ”
- JArgs API文檔 (Javadoc)
- GitHub上的JArgs : purcell / jargs
翻譯自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-13-jargs.html
總結
以上是生活随笔為你收集整理的Java命令行界面(第13部分):JArgs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精神病院3电脑版(精神病院3中文版)
- 下一篇: 大番茄U盘装机系统要如何安装系统?大番茄