Java 11/12使用maven生成Javadoc时,测试部分的Javadoc未能生成。

17

我有一个以下结构的小项目:

pom.xml

src/main/java/
  module-info.java
  de.ps.pl.te/
    package-info.java
    TE.java

src/test/java/
   de.ps.pl.te.test/
     package-info.java
     TETests.java

同时在我的maven pom文件中,我定义了以下javadoc插件:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <show>protected</show>
          <failOnError>false</failOnError>
        </configuration>
      </plugin>

现在我在运行过程中得到了一些奇怪的输出

mvn clean install site

[INFO] 正在生成“Javadoc”报告 --- maven-javadoc-plugin:3.1.0:aggregate-no-fork [ERROR] 获取链接时出错:D:\work\eclipse\java\FritzBox\phplib\target\javadoc-bundle-options。已忽略。 [...] [INFO] 正在生成“Test Javadoc”报告 --- maven-javadoc-plugin:3.1.0:test-aggregate-no-fork [ERROR] 获取链接时出错:D:\work\eclipse\java\FritzBox\phplib\target\javadoc-bundle-options。已忽略。 正在为包de.ps.pl.te.test加载源文件... 1个错误 [ERROR] 创建javadoc报告时出错: 退出码:2 - javadoc: error - No source files for package de.powerstat.phplib.templateengine.test 命令行是:[...]javadoc.exe @options @packages 请参阅'[...]'目录中生成的Javadoc文件。 org.apache.maven.reporting.MavenReportException: 退出码:2 - javadoc: error - No source files for package de.ps.pl.te.test 命令行是:[...]javadoc.exe @options @packages 请参阅'[...]\target\site\testapidocs'目录中生成的Javadoc文件。 at org.apache.maven.plugins.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5761) at org.apache.maven.plugins.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java:2148) at org.apache.maven.plugins.javadoc.TestJavadocReport.executeReport (TestJavadocReport.java:162) [...]

我研究了以下问题:

但是我的问题似乎与Java模块化有关。 因此问题是如何修复它-或者更多地进行错误报告?

编辑1

现在我尝试使用JDK 11.0.3和JDK 12.0.1-由于Oracle证书和服务器问题,我无法下载OpenJDK,因此无法测试OpenJDK 13早期访问。

有趣的是,在使用版本11/12时,错误消息略有不同。

JDK 11的错误是:

退出代码:1-Project \ src \ main \ java \ module-info.java:12:错误:找不到模块:org.apache.logging.log4j 需要org.apache.logging.log4j;

JDK 12的错误是:

退出代码:1-错误:找不到模块:de.powerstat.phplib.templateengine

其余消息仍然相同。

我还发现了一个可能涉及到的错误报告:

Javadoc不支持多版本jar中的module-info

另外,我尝试排除module-info.java,但没有成功:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <version>3.1.0</version>
  <configuration>
    <show>protected</show>
    <failOnError>false</failOnError>
    <sourceFileExcludes>
      <sourceFileExclude>**/module-info.java</sourceFileExclude>
    </sourceFileExcludes>
  </configuration>
</plugin>

编辑2

在target\site\apidocs文件夹中,我找到了以下(maven生成的?)文件:

  • argfile
  • javadoc.bat
  • options
  • packages

argfile:

'D:/TemplateEngine/src/main/java/de/ps/pl/te/package-info.java'
'D:/TemplateEngine/src/main/java/de/ps/pl/te/TemplateEngine.java'

javadoc.bat:

D:\Programme\Java\jdk-11.0.3\bin\javadoc.exe @options @argfile

软件包:

de.powerstat.phplib.templateengine
de.powerstat.phplib.templateengine

选项:

--module-path
'C:/.m2/repository/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2.jar;C:/.m2/repository/org/apache/logging/log4j/log4j-core/2.11.2/log4j-core-2.11.2.jar'
-sourcepath
'D:/TemplateEngine/src/main/java'
-d
'D:/TemplateEngine/target/site/apidocs'
-linkoffline
'https://docs.oracle.com/en/java/javase/11/docs/api' 'D:/TemplateEngine/target/javadoc-bundle-options'
[Removed uninteresting parts like encoding, title etc.]

如果有人想自己尝试,我现在已经将整个项目发布在GitHub上。

编辑3:

更新到Java 11.0.10或其他更新版本后,上述问题中的一些已经消失了。 但仍存在一个问题-我已经报告为bug


2
所以你没有将TETests放在与TE相同的包中?任何一个都应该可以,但我猜模块描述符的所有组合还没有被覆盖。我建议在https://issues.apache.org/jira/browse/MJAVADOC上为此创建一个问题,并附上这个小项目的zip文件。 - Robert Scholte
你尝试过使用Java 11或Java 13吗?我在这些版本中没有复现这个问题。另外,也许可以提供完整的pom和package-info文件。如果你没有使用module-info,那么你的应用程序就不是模块化的。 - pdem
你正在使用哪个版本的Maven? - ParanoidUser
4
建议您在公共git仓库上提供一个最小示例项目。 - Marinos An
1
@Marinos An,我已经将我的项目发布到Github上了-请查看EDIT 2。 - PowerStat
显示剩余8条评论
2个回答

1
在测试过程中,我看到了这个错误。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site (default-site) on project templateengine: Execution default-site of goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site failed: could not find reports directory [C:\tmp\TemplateEngine\target\pit-reports]
[ERROR]
[ERROR] Please copy and paste the information and the complete stacktrace below when reporting an issue
[ERROR] VM : OpenJDK 64-Bit Server VM
[ERROR] Vendor : Oracle Corporation
[ERROR] Version : 12.0.1+12
[ERROR] Uptime : 146619
[ERROR] Input ->
[ERROR]  1 : -Dclassworlds.conf=C:/ProgramData/chocolatey/lib/maven/apache-maven-3.6.1/bin/m2.conf
[ERROR]  2 : -Dmaven.home=C:/ProgramData/chocolatey/lib/maven/apache-maven-3.6.1
[ERROR]  3 : -Dlibrary.jansi.path=C:/ProgramData/chocolatey/lib/maven/apache-maven-3.6.1/lib/jansi-native
[ERROR]  4 : -Dmaven.multiModuleProjectDirectory=C:/tmp/TemplateEngine
[ERROR] BootClassPathSupported : false

我刚刚创建了文件夹"mkdir ./target/pit-reports",但它消失了。这导致了问题的产生。

<show>private</show>

所以我们可以说你在maven-javadoc-plugin中发现了一个bug :)

好知道 - 我需要报告吗,还是你已经报告了? - PowerStat
我刚刚找到了一个解决办法。你发现了它,应该报告一下。 - ozkanpakdil

1

我最近遇到了同样的错误。看起来是因为我的仓库中有maven-shade-plugin。我之前使用的是1.6的旧版本,将其升级到3.2.4后,这个错误就消失了。


这应该是对问题的评论,而不是答案。要点踩。 - axiopisty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接