我在项目的module-info
文件中添加了Javadoc注解,并在一个段落中放置了一个{@link}
标记,该标记引用了项目中的一个包。我还在引用的源包中添加了一个package-info.java
,该包也包含一个javadoc注解,它可以很好地构建和呈现。当我在项目上运行javadoc时,我收到下面的错误。我想在生成的javadoc中呈现一个可单击的链接,但在预期的链接文本中只显示等宽文本。
[ERROR] X:\my-project\src\main\java\module-info.java:6: error: reference not found
[ERROR] * <p>The {@link myproject.tools} package contains the utility classes</p>
[ERROR] ^
我的module-info.java
位于源代码树的根,src/java/main/
是:
/**
* My module documentation.
* <p>The {@link myproject.tools} package contains the utility classes</p>
*/
module MyProject {
...
}
我的package-info.java
位于:
<project-root>
+---- src/main/java/module-info.java
+---- src/main/java/myproject/tools/package-info.java
+---- src/main/java/myproject/tools/<various_classes_here>
并且包含:
/**
* This package contains my tools classes.
*/
package myproject.tools;
我使用的是Maven 3、JDK 11和Eclipse 4.13。它可以正确地生成所有其他javadoc API文档,但在这个link标记上会出现错误。自从我添加了这个link标记后,它就再也不能使用它了。
下面是我的maven-javadoc-plugin部分:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<excludePackageNames>org.*</excludePackageNames>
<show>package</show>
</configuration>
<reportSets>
<reportSet>
<id>default</id>
<reports>
<report>javadoc</report>
</reports>
</reportSet>
</reportSets>
</plugin>
...
</reporting>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<excludePackageNames>org.*</excludePackageNames>
<show>package</show>
<reportOutputDirectory>docs/javadoc</reportOutputDirectory>
</configuration>
</plugin>
...
</build>
下面是Javadoc在错误输出中报告的命令行:
[ERROR] Command line was: cmd.exe /X /C "C:\JDK1110\bin\javadoc.exe @options @argfile"
同时运行mvn site
和mvn javadoc:javadoc
会产生此错误。我做错了什么?
预期
根据Javadoc standard doclet specification,其中规定:
- {@链接包.class#成员标签}*
插入带有可见文本标签的内联链接,该文本标签指向指定包、类或引用类的成员名称的文档。此标记在所有文档注解中均有效:概述、模块、包、类、接口、构造函数、方法和字段,包括任何标记的文本部分,如@return、@param和@deprecated标记。
(bold文本强调是我的)
我使用JRE的jdk.jshell.module-info.class
作为所需行为的示例,它包含{@link package-name}
并在相应的模块文档as seen here中呈现可单击链接。
"我的努力"
除了添加这个{@link}
(如本问题中所述)之外,其他一切都可以正常编译。
将{@link}
更改为{@code}
将按预期呈现到页面上,但当然没有链接和错误。
- 然而 ,在Eclipse中,我可以将鼠标悬停在模块声明行上,它会呈现上面描述的javadoc**,并带有指向我的包的**链接 (如上面一段弹出窗口中所示),单击后, 正确地 * 导航到我的package-info javadoc并呈现它。
我还在module-info
中添加了以下语句,但没有解决问题:
opens myproject.tools to java.base, jdk.javadoc, javadoc;
适用于Eclipse(悬停在Javadoc的标识符上),但在使用Javadoc CLI(通过Maven)时不适用。
1条答案
按热度按时间qpgpyjmq1#
将以下语句添加到
module-info.java
解决了该错误:然而,这似乎违背了JPMS模块的目的,因为这使得包可用于外部库/应用程序(无意的),只是为了“链接到自己”。根据@slaw的评论,我怀疑这个问题原来是一个错误,在未来版本的Javadoc中得到了解决,并在JDK 19中正常工作。
谢谢大家的帮助!