Javadoc如何处理Java 9中模块的可见性?

Javadoc工具基于可访问性修饰符生成文档。 默认情况下,它记录所有publicprotected类,字段和方法。 可以使用以下选项更改此设置:

-上市
仅显示公共类和成员。

-protected
仅显示受保护的公共类和成员。 这是默认值。

-包
仅显示包,受保护和公共类和成员。

-私人的
显示所有类和成员。

Java 9引入了模块的概念,项目Jigsaw将其应用于现有的JDK。 Mark Reinhold的演讲(关于模块的一系列讨论中的第三篇)展示了public修饰符现在如何具有不同的可访问性级别,具体取决于模块的可见性(通过exports ):

  • 公开给大家
  • 公开但仅限于特定模块
  • 仅在模块内公开

由于现在并非所有公共成员都可以访问,因此继续使用相同的Javadoc生成方案就没有多大意义了。 只有那些暴露在“足够”水平的成员才应该被记录下来。

Javadoc模块是否可识别? 除了上面的命令选项还有处理额外曝光层的命令选项吗? 对于仅暴露给特定模块的公共成员,Javadoc是否列出了这些,如

 public  static void getDefaultThing() 

javadoc有新选项,允许您选择在模块,包,类型和成员级别记录哪些项目。 使用EA版本的JDK 9,查找新的--module , – --show-*选项和--expand-requires选项。

现有的选项-public-protected-public-private选项已经根据新的--show-*选项重新定义,尽管他们的命令行帮助仍然需要更新。

方便的转换表是:

 -public --show-module-contents api --show-packages exported --show-types public --show-members public -protected (the long-standing default) --show-module-contents api --show-packages exported --show-types protected --show-members protected -package --show-module-contents all --show-packages all --show-types package --show-members package -private --show-module-contents all --show-packages all --show-types private --show-members private 

通常,继续使用默认值为API用户生成文档,并且可以使用-package-private为API的开发人员生成文档。 要获得更精细的控制,请使用底层的--show-*选项。