【问题标题】:What causes maven-javadoc-plugin goal test-javadoc to fail on errors but test-javadoc-no-fork just to have warnings是什么导致 maven-javadoc-plugin 目标 test-javadoc 因错误而失败,但 test-javadoc-no-fork 只是有警告
【发布时间】:2017-09-23 20:22:11
【问题描述】:

我有一个带有 maven-javadoc-plugin 和 JDK8 的 Maven 项目。当我运行 mvn javadoc:test-javadoc 时,插件会报告文档错误并停止,但是当我运行 mvn javadoc:test-javadoc-no-fork 时,插件运行成功,并且只有一些警告。

问题是不是如何修复或文档错误。该插件发现了需要修复的真实文档问题,因此mvn javadoc:test-javadoc 报告的错误是正确的结果。

问题是:为什么mvn javadoc:test-javadoc-no-fork 没有失败,而是像警告一样处理问题?


背景:

  • 该项目是一个多模块项目
  • Maven 版本:3.3.9
  • maven-javadoc-plugin: 2.9.4(同样的行为发生在 3.0.0-M1)
  • Java8

TracingServiceSpringTest 中的运动问题确实缺少有关抛出的DatatypeConfigurationException 的文档

/** scenario: some text... **/
@Test
public void testImport() throws DatatypeConfigurationException {...

运行时的输出mvn javadoc:test-javadoc

[INFO]
[INFO] <<< maven-javadoc-plugin:2.10.4:test-javadoc (default-cli) < generate-test-sources @ agrovet-server <<<
[INFO]
[INFO] --- maven-javadoc-plugin:2.10.4:test-javadoc (default-cli) @ agrovet-server ---
[INFO]
...
3 errors
9 warnings
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] PROJECT ............................................ SUCCESS [  1.131 s]
[INFO] PROJECT :: Client .................................. SUCCESS [ 43.908 s]
[INFO] PROJECT :: Server .................................. FAILURE [ 44.774 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:36 min
[INFO] Finished at: 2017-09-23T21:33:33+02:00
[INFO] Final Memory: 96M/1573M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:test-javadoc (default-cli) on project PROJECT-server: An error has occurred in Test JavaDocs report generation:
[ERROR] Exit code: 1 - F:\workspaces\PROJECT\PROJECT-server\src\test\java\com\example\PROJECT\infrastructure\TracingServiceSpringTest.java:389: warning:
no @throws for javax.xml.datatype.DatatypeConfigurationException
[ERROR] public void testImport() throws DatatypeConfigurationException {
[ERROR] ^
...
[ERROR]
[ERROR] Command line was: "C:\Program Files\Java\jdk1.8.0_121\jre\..\bin\javadoc.exe" @options @packages
[ERROR]
[ERROR] Refer to the generated Javadoc files in 'F:\workspaces\PROJECT\PROJECT-server\target\site\testapidocs' dir.
[ERROR] -> [Help 1]
[ERROR]

...

运行时的输出mvn javadoc:test-javadoc-no-fork

8 warnings
[WARNING] Javadoc Warnings
[WARNING] F:\workspaces\PROJECT\PROJECT-server\src\test\java\com\example\PROJECT\infrastructure\TracingServiceSpringTest:389: warning: no @throws for javax.xml.datatype.DatatypeConfigurationException
[WARNING] public void testImport() throws DatatypeConfigurationException {
[WARNING] ^
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] PROJECT ............................................ SUCCESS [  0.454 s]
[INFO] PROJECT :: Client .................................. SUCCESS [  0.011 s]
[INFO] PROJECT :: Server .................................. SUCCESS [  6.763 [INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

Relevant POM Parts, parent pom.xml(完整的 pom 太大了,但这是唯一提到 maven-javadoc-plugin 的部分:

<dependencyManagement>
    <dependencies>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.10.4</version>
        </plugin>
    </dependencies>
</dependencyManagement>
...
<reporting>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <reportSets>
                <reportSet>
                    <reports>
                        <!-- 
                        javadoc-no-fork in order to prevent JavaDoc process from runing generate-source again
                        but this also requries that JavaDoc generation runs after compile: "mvn install site"
                        but not on a black project "mvn clean site"
                        -->
                        <report>javadoc-no-fork</report>
                        <report>test-javadoc-no-fork</report>
                    </reports>
                </reportSet>
            </reportSets>
        </plugin>
    </plugins>
</reporting>

【问题讨论】:

    标签: java maven javadoc maven-javadoc-plugin


    【解决方案1】:

    在尝试Generate Javadoc without duplicate execution of phase generate-sources 时。从 2.10 版开始,定义了两个新报告,javadoc-no-forktest-javadoc-no-fork 不会再次触发 generate-sourcesgenerate-test-sources 阶段。

    当您使用选项 test-javadoc-no-fork 时,将跳过测试源生成,因此您的构建成功。

    ...为 项目。它执行标准的 Javadoc 工具并支持 工具使用的参数,无需分叉生成测试源 再次相。请注意,此目标确实需要生成测试 网站生成之前的来源,例如通过调用mvn clean deploy site

    另一方面,javadoc:test-javadoc 再次编译测试源并记录错误。

    为项目生成测试 Javadoc 文件。它执行 标准的Javadoc工具,支持工具使用的参数。


    所有这些都与&lt;reportSets&gt;

    一组报告​​的多个规范,每个具有(可能) 不同的配置。这是与一个平行的报告 &lt;execution&gt; 在构建中。

    这两种类型都是no-fork,您可以尝试将test-javadoc 作为报告之一包含在&lt;reportSet&gt; 中以解决此问题。

    【讨论】:

    • 但是这个问题不是编译器问题。问题只是缺少抛出异常的 javadoc。 -- 即使在运行test-javadoc-no-fork 时,javadoc 工具也会识别出该问题(它会生成警告),但不会停止构建。
    • @Ralph Ya 一开始我可能弄错了。尝试在我的测试和主程序中分别用一个类重现相同的内容,但我无法让这两个命令都失败。您也可以尝试将test-javadoc 作为报告之一,看看是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2015-05-10
    • 2016-11-03
    相关资源
    最近更新 更多