Sonar maven jacoco代码覆盖了Multimodule项目。

问题描述 投票:2回答:2

我有一个多模块项目,有一个父pom.xml,里面有两个模块。Project.jar和Project.war。所有的测试用例都在Project.jar下。当我在父 pom 上运行 mvn sonar.sonar goal 时,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。

java maven code-coverage sonarqube jacoco
2个回答
2
投票

在2.4版本的java插件中,你必须在运行SonarQube分析之前生成覆盖率报告。你可以看到这个页面 https:/github.comSonarSourcesonar-jacoco。 关于如何做到这一点。


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插件做任何修改(因为我过去必须这样做)。

© www.soinside.com 2019 - 2024. All rights reserved.