首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven-javadoc-plugin和inheritDoc for Java核心类

maven-javadoc-plugin和inheritDoc for Java核心类
EN

Stack Overflow用户
提问于 2016-08-01 19:51:53
回答 2查看 1.4K关注 0票数 7

我正在编写自己的Java8Stream实现,并希望从原始的java.util.stream.Stream接口继承Javadocs。但是我不能让它起作用。生成的Javadoc只显示我的文档,而不显示来自extended接口的文档。

例如,该方法的javadoc只包含文本“一些附加信息”,而不包含来自Stream接口的文档。

代码语言:javascript
复制
/**
 * {@inheritDoc}
 * Some additional information.
 */
@Override
public Stream<T> filter(Predicate<? super T> predicate) {
  // ... my stream implementation...
}

这是maven-javadoc-plugin的配置:

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <version>2.10.1</version>
  <configuration>
    <links>
      <link>http://docs.oracle.com/javase/8/docs/api/</link>
    </links>
  </configuration>
</plugin>

我是不是错过了这种配置中的一些东西?我在maven编译器插件中将sourcetarget设置为1.8。因此,根据maven-javadoc插件的文档,应该自动检测java。

堆栈溢出上也有一个相似问题,但是那里的答案似乎没有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-01 21:25:28

这是预期的,javadoc只从源路径中的类复制注释。来自方法注释继承

注释:继承的方法的源文件必须位于-sourcepath选项指定的路径上,以便文档注释可供复制。不需要在命令行上传递类及其包。这与版本1.3.n和更早的版本形成了对比,在这些版本中,类必须是一个文档化的类。

但是,JDK的源代码不在源路径中,因此{@inheritDoc}不会复制它。它们需要被明确地添加;Javadoc FAQ有以下条目

从J2SE继承注释-您的代码还可以自动从J2SE中的接口和类继承注释。您可以通过解压缩随SDK附带的src.zip文件(但是它并不包含所有源文件)来实现这一点,并将其路径添加到-sourcepath中。当javadoc在您的代码上运行时,它将根据需要从这些源文件加载文档注释。例如,如果代码中的类实现了java.lang.Comparable,那么您实现的compareTo(Object)方法将从java.lang.Comparable继承文档注释。

因此,要使它发挥作用:

  1. 找到JDK的源代码,并将它们解压缩到某个地方。
  2. 配置maven-javadoc-plugin以使用sourcepath参数添加这些源。
  3. 有了上面的内容,我们还可以生成JDK本身的Javadoc,这是不必要的(我们只想继承),所以我们可以使用subpackages来指定包。或者,我们可以使用excludePackageNames来排除JDK包。
  4. JDK (至少是Oracle )还使用了新的Javadoc条目,即@apiNote@implSpec@implNote。这些是需要添加tags参数的自定义标记。

下面是一个示例配置,其中JDK源代码的路径是/path/to/jdk/sources (您还可以使用环境变量、配置文件设置的属性等)。而且您自己的源文件都在包my.package中。

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.1</version>
    <configuration>
        <sourcepath>/path/to/jdk/sources:${basedir}/src/main/java</sourcepath>
        <subpackages>my.package</subpackages>
        <tags>
            <tag>
                <name>apiNote</name>
                <placement>a</placement>
                <head>API Note:</head>
            </tag>
            <tag>
                <name>implSpec</name>
                <placement>a</placement>
                <head>Implementation Requirements:</head>
            </tag>
            <tag>
                <name>implNote</name>
                <placement>a</placement>
                <head>Implementation Note:</head>
            </tag>
        </tags>
    </configuration>
</plugin>

生成Javadoc,例如使用mvn javadoc:javadoc,将正确地解析{@inheritDoc}

票数 9
EN

Stack Overflow用户

发布于 2019-01-31 19:43:27

图纳基的回答是很棒的,但是从Java10开始,您还有一个更好的选择。如果将--override-methods=summary传递给Javadoc工具,它将将所有继承的方法向下推到下面的“在类X中声明的方法”部分。这将列出继承的方法。单击方法名称将带用户到基类中的Javadoc定义。

有关背景信息,请参见id=8187386

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38707030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档