【问题标题】:How does the Javadoc deal with the visibility of modules in Java 9?Javadoc 如何处理 Java 9 中模块的可见性?
【发布时间】:2017-06-15 05:27:55
【问题描述】:

Javadoc 工具根据可访问性修饰符生成文档。默认情况下,它记录所有publicprotected 类、字段和方法。这可以通过以下options 进行更改:

-公开
仅显示公共类和成员。

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

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

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

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

  • 对所有人公开
  • 公开,但仅限于特定模块
  • 仅在模块内公开

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

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

public <module1, module2> static void getDefaultThing()

?

【问题讨论】:

  • 有趣的问题,尤其是 javadoc 的目的可能既面向内部(例如库/模块的开发人员),也可能面向公众(例如库/模块的用户)。
  • @MarkRotteveel 是的。如果它仅针对库/模块的用户,我认为只会显示“对所有人公开”,因为在库编译期间无法知道用户的模块。不知道这对protected 意味着什么。
  • 似乎 javadoc 以某种方式配备了 some 模块文档(我没有尝试过任何一个)。 javadoc --help | grep module 表示有一些选项。根据我对这些可能的命令的理解,不知何故有两种类型的文档——通常的一种和/或模块。我可能完全错了……确实是个好问题。

标签: java javadoc java-9 java-platform-module-system java-module


【解决方案1】:

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

现有选项-public-protected-package-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-* 选项。

【讨论】:

  • 如果会,输出将如何变化? Javadoc 中是否会注明不同级别的public
猜你喜欢
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多