JDK 11+ 和 Javadoc

Raf*_*sco 52 java javadoc maven maven-javadoc-plugin java-11

Exit code: 1 - javadoc: error - The code being documented uses packages in the unnamed module, but the packages defined in https://docs.oracle.com/en/java/javase/11/docs/api/ are in named modules.
Run Code Online (Sandbox Code Playgroud)

有没有人能够使 javadoc 工作而不必将源版本更改为 1.8(如其他论坛中所建议的那样)?我正在使用 JDK v11.0.5 并且问题仍然存在(JDK 12+ 也是如此)。

编辑:此错误源自 maven 并由 maven-javadoc-plugin 抛出。即使使用<source>8</source>配置,我也无法使其适用于 JDK 11+ 。

Rom*_*adi 41

正如OpenJDK 问题跟踪器中建议的,这可以通过在 Javadoc 插件上定义源来解决:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

  • 可能您没有完全阅读问题。OP 明确提到:“有谁能够在不将源版本更改为 1.8 的情况下使 javadoc 工作” (7认同)
  • 这个对我有用。我使用: &lt;configuration&gt; &lt;source&gt;${java.version}&lt;/source&gt; &lt;/configuration&gt; ,在属性中它是 java 11。出于某种原因我只需要指定版本。 (3认同)
  • 使用 JDK 8 时,我将其设置为 1.8,而不是 8。也许两者都有效。 (2认同)

Car*_*tos 24

添加<detectJavaApiLink>false</detectJavaApiLink>到Maven javadoc插件配置修复错误

  • 这对我在 Mac 上使用 AdoptOpenJDK 11.0.8 (2020-07-14) 有效。我已经设置了 `&lt;source&gt;8&lt;/source&gt;` 并且它适用于 JDK 11 的其他版本,但不适用于 11.0.8。 (2认同)

小智 18

我需要 Carlos Santos 的帮助才能使这真正奏效。包含他的答案的完整配置是:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <configuration>
    <source>8</source>
    <detectJavaApiLink>false</detectJavaApiLink>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。即使没有`&lt;source&gt;8&lt;/source&gt;`,上面的代码片段仍然对我有用,结合`&lt;properties&gt;maven.compiler.source&gt;11&lt;/maven.compiler.source&gt;&lt;maven.compiler.target&gt; 11 &lt;/maven.compiler.target&gt;&lt;/属性&gt;` (2认同)

rü-*_*rü- 6

javadoc生成您使用的包的链接,例如.../javase/11/docs/api. 虽然您的注释位于未命名的模块中,但目标不是,并且 javadoc 无法将这两者结合起来。它会生成一个文件package-list或一个element-list文件,因此您不能将未命名的模块(包)与命名的模块混合在一起。

我没有找到一种方法来限制 javadoc 尝试生成的链接;所以你可能必须为你自己的项目使用模块。这对我来说似乎很荒谬,只是为了让 javadoc 高兴。我想这只是这么多人坚持使用 Java 8 的原因之一。