Javadoc @link标记在www.example.com中不起作用module-info.java

56lgkhnf  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(212)

我在项目的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 sitemvn 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)时不适用。

qpgpyjmq

qpgpyjmq1#

将以下语句添加到module-info.java解决了该错误:

exports myproject.tools;

然而,这似乎违背了JPMS模块的目的,因为这使得包可用于外部库/应用程序(无意的),只是为了“链接到自己”。根据@slaw的评论,我怀疑这个问题原来是一个错误,在未来版本的Javadoc中得到了解决,并在JDK 19中正常工作。
谢谢大家的帮助!

相关问题