多模块项目的声纳maven jacoco代码覆盖率

时间:2014-08-11 06:27:17

标签: java maven code-coverage sonarqube jacoco

我有一个带有父pom.xml的多模块项目,里面有两个模块。 Project.jar和Project.war。所有测试用例都在Project.jar下。当我在父pom上运行mvn sonar.sonar目标时,jacoco.exec没有生成,代码覆盖率为空。我在父pom中有以下属性。

<properties>
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/target/jacoco.exec</sonar.jacoco.reportPath>
</properties>

请帮忙。我正在使用Sonarqube 4.2。

2 个答案:

答案 0 :(得分:2)

使用java插件的2.4版本,您必须在运行SonarQube分析之前生成覆盖率报告。您可以在http://docs.codehaus.org/display/SONAR/JaCoCo+Plugin页面上看到如何执行此操作。

答案 1 :(得分:0)

对于那些有类似问题的人,我解决了这个问题的方式略有不同(我从命令行运行它而没有Jenkins这样做)。我没有插件的问题。

所有这些设置都在父POM中定义。我使用以下版本:

<plugin.jacoco.version>0.7.2.201409121644</plugin.jacoco.version>

报告路径略有不同,这使得它只创建了一个jacoco.exec。默认情况下,如果文件已存在,Sonar会将结果附加在一起。

<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>

在pluginManagement部分中,我有以下插件:

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>${plugin.jacoco.version}</version>
  <configuration>
    <destFile>${sonar.jacoco.reportPath}</destFile>
  </configuration>
  <executions>
    <execution>
      <id>agent</id>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
  </executions>
</plugin>

然后在我的插件部分中,我确保该插件可用于整个项目:

  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
  </plugin>

正如benzonico所说,你需要在声纳分析它们之前进行测试,我的工作如下:

mvn clean test sonar:sonar

我没有对Surefire插件进行任何更改(因为我过去必须这样做)。