Oracle公司Java SE語言工具團隊領導Jonathan Gibbons創造了JEP 293,以引進一套JDK工具中的命令行選項準則來修復現有的它們之間存在的差異。JEP目前還沒有目標版本,所以最快將會和Java 10一起交付。然而,考慮到它僅僅是為新的選項創造一套準則,而不是修改現有的選項,所以可能需要一段時間才能感受到它的效果。
正如在JEP中所述,JDK中不同的工具的命令行選項格式都不對齊。比如說,短的選項有時候只有一個字母(比如-p表示一個模塊),但有時候又超過一個字母(比如說現有的-cp指令代表路徑)。同時,相同的選項會被不同的工具以不同的方法調用,比如javac中的-version指令與pack200中--version指令(請注意這里是兩個破折號)。這會給創造JDK工具上的功能帶來困難,也會給新的開發者熟悉了解命令行選項帶來困難。
為了解決這種情況,新的JEP將為新的命令行選項創造一套新的標準,類似于UNIX的風格,很大程度上基于getopt(3)。雖然可以在文檔中查看到完整的內容,但是與用戶息息相關的一些準則羅列在下面:
選項必須有一個長的和一個短的格式。短格式由一個破折號和一個字母組成,長格式有兩個破折號開頭,之后可以添加需要多的字母和破折號。 短選項可以相互組合,例如說-m -k與-mk相同。 選項需要有一個可選參數。 在所有工具中,幫助選項都必須保持一致。與向后兼容的理念一致,JEP的準則只適用于新的命令行選項,但不適用于現有的命令行選項。這就代表著,即使它們不滿足準則,一部分或者所有的現有選項將不被移除。此外,新的準則選項將與現有的準則一同運作,所以有的功能將會擁有新的和舊的命令行選項。雖然這聽上去是向后兼容的一個很好的折中和改進,但是討論組中一些人指出一些模棱兩可的問題將很難解決。隨著發展,準則將進行調整以適應這些問題。
查看英文原文:Oracle Paves the Way to Standardise Command Line Options in the JDK