Oracle 为标准化 JDK 中命令行选项作准备

  • Abraham Marín Pérez
  • 刘嘉洋

2016 年 7 月 31 日

话题:JavaDevOps语言 & 开发

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

JavaDevOps语言 & 开发