mvn网站构建过程中的Maven2 Multiproject Cobertura报告问题

时间:2020-03-06 14:22:25  来源:igfitidea点击:

作为mvn网站构建的一部分,我们有一个多项目正在尝试运行Cobertura测试覆盖率报告。我可以让Cobertura在子项目上运行,但是它错误地报告了0%的覆盖率,即使报告仍然突出显示了单元测试中遇到的代码行。

我们正在使用mvn 2.0.8. 我试过运行" mvn clean site"," mvn clean site:stage"和" mvn clean package site"。我知道测试正在运行,它们显示在surefire报告(txt / xml和站点报告)中。我在配置中缺少什么吗? Cobertura是否不适用于多项目?

这在父.pom中:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>clean</id>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <inherited>true</inherited>
        </plugin>
    </plugins>
</reporting>

我试过在子.poms中有无以下内容的情况下运行它:

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
        </plugin>
    </plugins>
</reporting>

我在构建的输出中得到了这一点:

...
[INFO] [cobertura:instrument]
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 3 files to C:\workspaces\sandbox\CommonJsf\target\generated-classes\cobertura
Cobertura: Saved information on 3 classes.
Instrument time: 186ms

[INFO] Instrumentation was successful.
...
[INFO] Generating "Cobertura Test Coverage" report.
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Cobertura: Loaded information on 3 classes.
Report time: 481ms

[INFO] Cobertura Report generation was successful.

该报告如下所示:
cobertura报告http://trandem.com/images/cobertura.png

解决方案

我并没有成功让Cobertura合并来自多个项目的报告。对于多项目报告,这通常是一个问题。

我们一直在评估声纳,将其作为指标报告的解决方案。在跨项目(包括多项目)中提供摘要指标似乎做得很好。

我怀疑我们在编译阶段没有执行cobertura插件,因此在测试运行之后,代码仅在站点生命周期中由报告插件来检测。因此不会进行测试,因为它们是在非仪器代码上运行的。如果我是正确的话,请更仔细地分析构建日志,我们会发现在cobertura:instrument之前执行了surefire测试。

我的配置与配置相似,但是除了在pluginManagement中指定干净的执行方式(像我们一样)之外,我还在build plugins部分中显式指定了cobertura插件:

<build>
  ...
    <plugins>
    ...
      <plugin>
        <inherited>true</inherited>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${cobertura.plugin.version}</version>
      </plugin>
    </plugins>
  </build>

我的配置排序有效,并且所有Cobertura内容都在全球组织范围的pom中,所有项目都将其用作父项。

这样,项目不会在其pom.xml中指定任何与Cobertura相关的内容,但仍会生成覆盖率报告。

我实现的解决方案有些手动,但是可行。它由几个步骤组成,一个步骤是合并Cobertura生成的多个.ser文件的步骤。这可以通过在maven任务中使用cobertura-merge命令行工具来完成。

根据我们显示的输出,实际上并没有检测到文件,它表明仅检测了3个文件。