当前位置: 首页 > 知识库问答 >
问题:

maven-javadoc-plugin和JavaAPI核心类的继承Doc

淳于飞文
2023-03-14

我正在编写自己的Java8 Stream实现,并希望从原始java.util.stream.Stream接口继承Javadocs。但是我无法让它工作。生成的Javadoc只显示我的留档,而不显示扩展Stream接口的留档。

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

/**
 * {@inheritDoc}
 * Some additional information.
 */
@Override
public Stream<T> filter(Predicate<? super T> predicate) {
  // ... my stream implementation...
}

这是我对maven javadoc插件的配置:

<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编译器插件中将源代码和目标代码设置为1.8。因此,根据maven javadoc插件的文档,应该自动检测java API。

Stack Overflow上也有类似的问题,但那里的答案似乎没有帮助。

共有2个答案

魏波娃
2023-03-14

Tunaki的答案很好,但是从Java10开始,你有一个更好的选择。如果你把--override-method=摘要传递给Javadoc工具,它会把所有继承的方法推送到下面的“在类X中声明的方法”部分。这将列出继承的方法。单击方法名称将使用户转到基类中的Javadoc定义。

看见https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8187386背景信息。

辛麻雀
2023-03-14

也就是说,javadoc只复制源路径内类的注释。来自方法注释继承:

注意:继承方法的源文件必须位于“源路径”选项指定的路径上,才能复制文档注释。类及其包都不需要在命令行上传入。这与1.3版形成对比。n和早期版本,其中类必须是有文档记录的类。

但是,JDK的源代码不在源代码路径中,因此{code>{@inheritDoc}不会复制它。它们需要明确添加;Javadoc常见问题有以下条目:

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

所以,为了让它发挥作用:

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

这里是一个示例配置,其中JDK源的路径是(您也可以使用环境变量、由概要文件设置的属性等),并且您自己的源文件都在包my中。包装:

<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}

 类似资料:
  • 在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。 Python 中继承的语法如下: class Parent: pass class Child(Parent): pass 在第 1 行,定义了父类 Parent; 在第 4 行,定义了子类 Child,语法

  • 主要内容:可继承的 POM 元素Maven 在设计时,借鉴了 Java 面向对象中的继承思想,提出了 POM 继承思想。 当一个项目包含多个模块时,可以在该项目中再创建一个父模块,并在其 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。对于父模块而言,其目的是为了消除子模块 POM 中的重复配置,其中不包含有任何实际代码,因此父模块 POM 的打包类型(packaging)必须是 po

  • 问题内容: 我想从Javadoc实现的接口继承Javadoc 。我在Javadoc命令中包含了源代码,并正确继承了文档。 现在,我想知道是否可以使它生成的链接指向Web上的文档,而不是在我的网站上复制它,即“ Specified by:”链接将链接到外部页面。 这可能吗? 问题答案: 有可能,是的。为了能够包含继承的文档,必须在javadoc的sourcepath中找到接口A的源,但不应在传递给用

  • 我正在自己学习swift,但我无法让这个代码运行,我正在尝试创建一个类“Inhabitant”,它继承了Person类的一个新的“Country”属性,有两个初始值设定项:-一个接受firstname和lastname,并将Country设置为空String-一个接收firstname,lastname和country,并创建String类型的计算属性描述,该描述返回由空格分隔的名字、姓氏和国家

  • 由于未创建javadocs而失败。所以我试着跑 我和我看到它失败了,因为源代码中的javadoc注释没有定义所有的参数和返回值。错误的格式如下: 然而,这曾经起作用。那是什么改变了? 当我搜索参数additionalParam时,它不会出现。我搞不懂这怎么会起作用。搜索答案有些人说使用我正在使用的东西,有些人说使用AdditionalJOption。当Javadoc标记不完整时,请参见Maven在

  • 1、定义类的继承 说到继承,你一定会联想到继承你老爸的家产之类的。 类的继承也是一样。 比如有一个旧类,是可以算平均数的。然后这时候有一个新类,也要用到算平均数,那么这时候我们就可以使用继承的方式。新类继承旧类,这样子新类也就有这个功能了。 通常情况下,我们叫旧类为父类,新类为子类。 首先我们来看下类的继承的基本语法: class ClassName(BaseClassName): <st