我正在编写自己的 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.zip
SDK 附带的文件(但是它不包含所有源文件),并将其路径添加到-sourcepath
. When javadoc
在您的代码上运行,它将根据需要从这些源文件加载文档注释。例如,如果代码中的类实现java.lang.Comparable
, the compareTo(Object)
您实现的方法将继承文档注释java.lang.Comparable
.
因此,要使其发挥作用:
- 找到 JDK 的源代码并将其解压缩到某个位置。
- 配置
maven-javadoc-plugin
添加这些来源sourcepath https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#sourcepath范围。
- 有了上面的内容,我们还会生成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 包。
- 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(使用前将#替换为@)