为什么cobertura报告除了多模块maven项目中的一个模块之外的所有模块的代码覆盖率为零?

时间:2012-06-30 07:22:53

标签: cobertura

我正在尝试使用cobertura为我们的多模块maven项目生成代码覆盖率报告。在我运行mvn clean然后运行mvn包之后。然后,在我们运行JUnit测试的其中一个模块中,为该模块生成的覆盖率报告按预期正确。但覆盖范围仅适用于少量套餐。并非涵盖所有包裹。请记住,它是一个多模块项目,其中包含一个父POM,每个子模块都有自己的POM。我是否还应该在每个儿童POM中包含cobertura maven插件详细信息?

但是,在其他/ target / site / cobertura目录中生成的单个模块特定覆盖率报告对于线路覆盖和分支覆盖都报告为零。

我在父母POM中遗失了什么?我没有做过任何改动 目录中的任何子POM。请告诉我 如何为多模块maven项目生成代码覆盖率报告 使用cobertura。

以下是我的父母POM的样子。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <formats>
            <format>html</format>
            <format>xml</format>
        </formats>
    </configuration>
    <inherited>true</inherited>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>cobertura</goal>
            </goals>
       </execution>
   </executions>
</plugin>

...

<dependencies>
    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.5.1</version>
        <type>plugin</type>
        <scope>package</scope>
    </dependency>
</dependencies>

谢谢!

1 个答案:

答案 0 :(得分:1)

根据文档,作为构建的一部分运行的插件和作为报告的一部分运行的插件之间存在区别: http://maven.apache.org/guides/mini/guide-configuring-plugins.html

你使用'执行'表明你有'build'下的插件,而显然它属于'reporting' - 根据cobertura用法页面: http://mojo.codehaus.org/cobertura-maven-plugin/usage.html

尝试从'build'中完全删除cobertura插件,而不是将其置于'reporting'之下:

<project>
    <!-- project stuff-->
    <build>
        <!-- build stuff -->
    </build>
    <reporting>
        <plugins>
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.2</version>
                <configuration>
                    <formats>
                        <format>html</format>
                    </formats>
                </configuration>
            </plugin>
        </plugins>
    </reporting>
</project>

然后用

运行它
mvn cobertura:cobertura

mvn site