mvn网站构建过程中的Maven2 Multiproject Cobertura报告问题
作为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个文件。