Java API核心类的maven-javadoc-plugin和inheritDoc

2023-12-23

我正在编写自己的 Java 8 Stream 实现,并希望继承原始版本的 Javadocsjava.util.stream.Stream界面。但是我无法让它工作。生成的 Javadoc 仅显示我的文档,但不显示扩展 Stream 接口的文档。

例如,此方法的 javadoc 仅包含文本“一些附加信息”,但不包含来自Stream界面。

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

这是我的 maven-javadoc-plugin 配置:

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

我是否错过了此配置中的某些内容?我设置source and target到 1.8 在 maven-compiler-plugin 中。所以根据文档maven-javadoc-插件 https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#detectJavaApiLink,应该会自动检测java API。

还有一个类似的问题 https://stackoverflow.com/questions/3401642/how-do-i-make-javadoc-inheritance-work-for-external-apis-with-maven2/3402644在 Stack Overflow 上,但那里的答案似乎没有帮助。


预计,javadoc仅复制源路径内的类的注释。从方法注释继承 http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#CHDFAGJH:

Note:继承方法的源文件必须位于-sourcepath可以复制文档注释的选项。类及其包都不需要在命令行中传递。这与版本 1.3.n 和早期版本形成鲜明对比,其中该类必须是已记录的类。

但是,您的 JDK 的源代码不在源路径中,因此{@inheritDoc} http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#CHDGJCHC不会复制它。需要明确添加它们;这Javadoc FAQ 有这个条目 http://www.oracle.com/technetwork/java/javase/documentation/index-137483.html#incrementalbuild:

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

因此,要使其发挥作用:

  1. 找到 JDK 的源代码并将其解压缩到某个位置。
  2. 配置maven-javadoc-plugin添加这些来源sourcepath https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#sourcepath范围。
  3. 有了上面的内容,我们还会生成JDK本身的Javadoc,这是不必要的(我们只想继承),所以我们可以使用subpackages https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#subpackages仅指定我们的包。或者,我们可以使用excludePackageNames https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#excludePackageNames排除 JDK 包。
  4. JDK(至少是 Oracle JDK)还使用新的 Javadoc 条目,即@apiNote, @implSpec and @implNote。这些是需要添加的自定义标签tags https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#tags范围。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java API核心类的maven-javadoc-plugin和inheritDoc 的相关文章

随机推荐

  • VSCode:防止分割编辑器在聚焦时调整大小?

    打开多个编辑器组 并且其中一个编辑器组足够小 聚焦较小的编辑器组会导致它变大 直到您切换回另一个编辑器 我希望将所有内容保留为我设置的大小 有没有设置可以防止这种情况发生 Note how it has to be made small f
  • 使用 Selenium WebDriver C# 从下拉列表中选择一个值 [重复]

    这个问题在这里已经有答案了 我在使用 WebDriver 的 C 绑定从下拉列表中选择值时遇到了困难 我过去既没有研究过 C 也没有研究过 WebDriver 我正在使用 WebDriver Selenium dotnet2 0b3 和 V
  • 在 MySql TIME 列中保存 LocalTime

    背景故事 我最近在保存时遇到了一个问题LocalTime to a TIMEMySQL 数据库中的列 节省价值9 00正在引起8 00保存在数据库中 这个问题没有出现在我的开发环境 Windows 上 但出现在我们尝试的两台 Linux 机
  • Scala 初始化行为

    请看下面的代码 trait MyTrait val myVal String class MyClass extends MyTrait val myVal Value class MyClass2 val myVal String ext
  • Cassandra 错误消息:由于本地暂停未将节点标记为关闭。为什么?

    我有 6 个节点 1 个 Solr 5 个 Spark 节点 使用 datastax 我的集群位于与 Amazon EC2 类似的服务器上 具有 EBS 卷 每个节点有3个EBS卷 使用LVM组成逻辑数据盘 在我的 OPS 中心 同一节点经
  • Python 文件吸食

    Python 中是否有一个单行代码可以读取文件的所有行 而不是标准的 f open x txt cts f read f close 看来这种事经常发生 所以必须有一句俏皮话 有任何想法吗 This will slurp the conte
  • 如何在 Windows 7 上查找 MAC 地址? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我可以使用命令找到我的机器的MAC地址ipconfig all在命令提示符下 网络上到处都说物理地址是MAC地址 这是命令的结果ipcon
  • CKEditor5 和 Angular2 - 在编辑器内单击以获取数据时获取插入符的准确位置

    在 Angular 2 中 当我单击某个对象内部时 我试图获取板条箱的确切位置CKEditor5 Balloon Editor实例 我将在页面上有几个实例 每个实例都通过 ViewChildren and a QueryList 每个实例都
  • Rust 中的不可变变量和 const 变量有什么区别?

    我了解到 如果变量没有使用显式声明为可变的mut 它变得不可变 声明后不能更改 那为什么我们有constRust 中的关键字 它们不是一样的吗 如果不是 它们有何不同 const 在 Rust 中是缩写constant并且与编译时评估 它显
  • 关闭 fancybox iframe 后 Chrome 中的后退按钮无法正常工作

    不久前我在 fancybox github 上发布了同样的问题 但当时问题无法解决 所以我想我可以在这里再试一次 在 Chrome 中 我打开 fancybox iframe 然后使用 iframe 页面上的链接进行导航 然后关闭 fanc
  • Scala REPL 中的嵌套环境

    是否有可能创建 enter Scala REPL 中的嵌套环境 这样之后exiting嵌套环境中 在退出环境中创建的所有变量绑定都会丢失 这就是我的wish会话可能如下所示 scala gt val x 1 x Int 1 scala gt
  • 自定义字体为 Android 中的某些字母组合提供了不正确的字形

    我在我的 Android 项目中使用自定义字体 由于某种原因 当文本包含字母时IJ一起 它给了我以下字形 这似乎是位于 uE2C5字体的 PUA 区域 个人I and J字形都存在于字体中 如果我将文本设置为 我可以让它们出现I J 它不是
  • 访问 Angular2 模板中的特定数组元素

    我有一个可以循环使用的数组ng for句法 然而 最终我只想访问该数组的一个元素 我不知道该怎么做 在我的组件脚本中我有 export class TableComponent elements IElement 在我的模板中 我可以通过循
  • 以编程方式原生 Android VPN

    这个问题存在变体 但我似乎无法理解某些东西 如果您阅读了功能末尾的内容工业控制系统 4 0 http developer android com about versions android 4 0 highlights html 其中提到
  • 如何跟踪迭代开始日期后已添加到冲刺中的 Azure 工作项?

    Folks 首先 这个问题基于这样的前提 我通过分析视图连接 Azure DevOps 数据 并且所有可用字段都已选择到视图中 我想跟踪开发团队是否坚持计划或处理已创建的积压项目或在冲刺开始后已添加到冲刺中的项目 但我不知道该怎么做 显然
  • 列出 Debian 中所有用户安装的软件包

    在我参加的一次网络安全竞赛中 我获得了一台安装了许多软件包的 Debian 虚拟机 并要求我清理无关或恶意的软件包 过去我用过dpkg l grep searchterm 以及执行此任务的常用包的列表 然而 这是极其低效且耗时的 为了加快我
  • Spring FactoryBean 和作用域一起工作

    我想一起使用 FactoryBeans 和作用域 具体来说 我希望将 FactoryBean 创建和返回的对象放置到指定的 可能是自定义的 范围中 问题在于执行以下操作
  • 如何更改 Winforms 按钮上第二行文本的字体大小和颜色?

    this Controls Add button button Font new Font Arial 8 button Name btn idDanych button Width 100 button Height 100 button
  • 奇怪的文件查找行为

    对于下面的两次交互 我希望两者输出相同的文件 但第二个交互写入文件末尾 唯一的区别是写入后的读取语句 我不明白发生了什么 我缺少什么 预期行为 gt gt gt f open test txt w gt gt gt f write 0123
  • Java API核心类的maven-javadoc-plugin和inheritDoc

    我正在编写自己的 Java 8 Stream 实现 并希望继承原始版本的 Javadocsjava util stream Stream界面 但是我无法让它工作 生成的 Javadoc 仅显示我的文档 但不显示扩展 Stream 接口的文档