Java命令行界面(第30部分):观察
這個有關(guān)Java命令行參數(shù)解析的系列文章由四個月來發(fā)表的29篇文章組成,涵蓋了28個不同的開放源代碼庫,可用于解析Java命令行參數(shù)。 這篇文章收集了可以從本系列的前29篇文章中得出的一些觀點,并提供了一些一般性的考慮,以便在選擇28個庫中的一個或決定使用自己的命令行參數(shù)解析代碼時進行選擇。 盡管沒有一個圖書館會最適合每種情況,但本文還將探討某些圖書館在特定情況下可能比其他圖書館更適合。 該帖子將以原始28個庫的一個子集結(jié)尾,根據(jù)該帖子所涉及的一些標準,這可能是所涵蓋庫中最吸引人的。
一般觀察
查看本系列中涉及Java解析命令行參數(shù)的28個庫后,可以得出一些結(jié)論 。
- 對于大多數(shù)情況下的大多數(shù)Java開發(fā)人員而言,似乎很少有理由編寫自定義命令行解析代碼 。
- 大量基于Java的庫,用于解析命令行參數(shù),以指示Java生態(tài)系統(tǒng)的廣闊性。
- 所有28個涵蓋的庫都是開放源代碼,這一事實提醒我們在Java文化中基本開放源代碼的地位如何。
- 本系列文章涵蓋的庫之間有一些有趣的差異,各種不同的方法提醒我們,在Java中實現(xiàn)甚至相對較小的功能通常也有不止一種方法。
- Java中有大量用于解析命令行參數(shù)的庫,其中許多與作者聲明相關(guān)聯(lián),這些語句表明現(xiàn)有庫無法滿足其需求,這表明不可能有單一的語言,框架或庫對每個人都是“最好的”。 如果不能將像命令行解析庫這樣簡單的東西寫成每個人都喜歡的東西,那么似乎不可能有一個更大的庫,框架或編程語言成為每個人都喜歡的東西。 在庫,框架和編程語言方面,“ 一種規(guī)格不能滿足所有需求 ”。
- 在評估和選擇庫時,不僅要考慮技術(shù)實力,還應(yīng)考慮技術(shù)因素。 它的許可證,分配機制,貨幣,提供者支持和社區(qū)支持也都影響了決策。 甚至將要運行的Java版本都在決策中起作用。
評估標準
當(dāng)在如此眾多的庫之間進行選擇以及權(quán)衡是使用庫還是實現(xiàn)自己的命令行參數(shù)功能時,這些條件對于Java開發(fā)人員而言可能很重要。
- 它是開源的嗎?
- 在這種情況下,我對開放源代碼的簡單定義是“開發(fā)人員可以使用該庫合法地查看源代碼?!?
- 它的許可證是什么?
- 發(fā)行每個庫所依據(jù)的許可證對于確定是否選擇該庫具有重要意義。
- 它的大小是多少?
- 庫的使用通常意味著在類路徑上有一個附加的JAR,在某些情況下,對于特定的部署環(huán)境,使這些附加的庫的大小保持盡可能小可能很重要。
- 是否存在第三方依賴項?
- 第三方庫增加了庫大小的整體增加,并意味著要管理的依賴項更多。
- 分配機制是什么?
- 通過Maven存儲庫作為單個JAR的可用性可能是大多數(shù)Java開發(fā)人員獲取庫的最簡單機制。
- 文獻資料
- 本系列文章涵蓋的庫以各種方式進行了文檔記錄,包括項目文檔,Javadoc文檔,單元測試和代碼內(nèi)注釋。
- 社區(qū)
- 對于開源項目,擁有一個使用該產(chǎn)品的大型社區(qū)通常是有利的,因為大型社區(qū)意味著更多的隱式測試以及可能會有更多關(guān)于如何使用該項目的博客文章,文章和論壇消息。
- 圖書館時代/最新更新
- 較新并不總是更好,但與使用多年未更新或更改的產(chǎn)品相比,使用接受當(dāng)前和最新更新的開源產(chǎn)品通常更有吸引力。
- 它提供什么功能?
- 這是本系列中的庫真正使自己與眾不同的地方,但這是最難在庫之間進行比較的標準,因為它實際上取決于所需的特定功能。
picocli GitHub 頁面上的“ CLI比較”頁面對本系列中涉及的許多庫以及本系列中未涉及的一些庫進行了比較和對比。 該頁面通過列出每個庫各自的屬性(例如許可證,支持的最低Java版本,API樣式和支持的解析選項)以表格格式比較庫。
本系列涵蓋了28種不同的庫,用于解析Java的命令行參數(shù)。 為此,不可能在所有情況下都將其中任何一個指定為“最佳”庫。 每個庫都是其開發(fā)人員(或多個開發(fā)人員)對時間和精力的投資,但是我在這里嘗試將庫列表縮小到我認為最有可能吸引一般情況和開發(fā)人員的子集。
最有可能投票成功
以下庫按字母順序列出,而不是按我的偏愛順序列出。
- Apache Commons CLI
- 在我看來,Apache Commons CLI在推薦的庫的縮小子集中提供了最不美觀的API。
- args4j
- args4j具有眾多功能,并且具有高度可擴展性。
- 指揮官
- API由注釋和構(gòu)建器的易于使用的組合組成。
- JewelCli
- JewelCli的帶注釋接口方法吸引了我。
- Picocli
- 高度可讀的基于注釋的API。
盡管我列出了涵蓋的28個庫中的5個庫的子集,但是由于某些原因,開發(fā)人員可能選擇使用不在此縮小列表中的23個庫之一。 不在此列表中的幾個庫提供了獨特的功能,這些功能如果對Java開發(fā)人員來說足夠重要,將使這些庫優(yōu)于上面列出的5個。
接下來的清單將一些涵蓋的庫與它們相對獨特的優(yōu)勢聯(lián)系在一起。 即使它不是我剛剛強調(diào)的五個列表中的一個,也可以選擇其中的一個,如果它在特殊情況下具有獨特的優(yōu)勢,并且是相關(guān)應(yīng)用程序最重要的考慮因素之一。 列出的許多“特征”是喜好或品味的問題,這意味著具有列出的特征的文庫可能被一個開發(fā)人員視為肯定,而被另一個開發(fā)人員視為否定。
| 顏色語法 | 顏色語法(選擇環(huán)境) | Picocli |
| 命令完成 | 自動完成命令(某些環(huán)境) | Picocli |
| 配置(注釋) | 主要使用注釋來定義命令行選項。 | 航空公司2 args4j 解析器 CmdOption 命令行 谷歌選項 杰博克 指揮官 JewelCli MarkUtils-CLI Picocli 羅普 |
| 配置(API) | 使用編程API(傳統(tǒng)和/或生成器)定義命令行選項。 | Apache Commons CLI Argparse4j argparser CmdLn getopt4j 雅高 杰格普 杰格斯 聯(lián)合會 拍手 JOpt簡單 JSAP jw選項 解析cmd |
| 配置(反射) | 使用反射(但不使用注釋)定義命令行選項。 | 克拉爾 |
| 配置(XML) | 使用或支持使用XML定義命令行選項。 | 突擊隊 JSAP |
| 單一檔案來源 | 可以輕松地將“庫”作為已編譯的源代碼文件而不是作為針對其進行編譯的JAR包含在項目中。 | 克拉爾 Picocli |
| 小罐子 | 提供最小要求的JAR且大小小于25 KB的庫(適用于本系列中介紹的版本)。 | 克拉爾 解析器 getopt4j 杰格普 杰格斯 拍手 jw選項 羅普 |
在基于Java的命令行分析庫中,人們可能希望擁有許多其他特性,這些特性可能會縮小適當(dāng)候選對象的數(shù)量。 這些包括命令樣式(長名稱和/或簡稱,樣式[GNU,POSIX,Java等])的靈活性,適用的許可證,當(dāng)前支持的可用性,新版本和更新,用戶社區(qū)的大小以及Java的最低版本被支持。 先前參考的Java命令行解析器比較中提供的表使本系列涵蓋的大多數(shù)庫的某些特征比較變得容易。
這個使用Java解析命令行參數(shù)的系列展示了28個庫,并且該系列中還沒有涉及更多公共可用的庫。 擁有超過30個可用的庫,大多數(shù)開發(fā)人員應(yīng)該能夠找到一個滿足自己需求的外部庫。
其他參考
- Java庫用于解析命令行參數(shù)? [關(guān)閉]
- 如何在Java中解析命令行參數(shù)?
- 適用于Java的最佳CLI解析器
- 我應(yīng)該使用哪個庫來處理Java程序的CLI參數(shù)?
- Java命令行解析器比較
翻譯自: https://www.javacodegeeks.com/2017/11/java-command-line-interfaces-part-30-observations.html
總結(jié)
以上是生活随笔為你收集整理的Java命令行界面(第30部分):观察的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显卡坞对电脑有危害么(扩展坞会对电脑有损
- 下一篇: java 垃圾回收手动回收_Java垃圾