繁体   English   中英

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

[英]Sonar maven jacoco code coverage for Multimodule project

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

<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 插件的 2.4 版,您必须在运行 SonarQube 分析之前生成覆盖率报告。 你可以看到这个页面https://github.com/SonarSource/sonar-jacoco关于如何做到这一点。

对于那些有类似问题的人,我稍微不同地解决了这个问题(我从命令行运行它而不是让 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 插件进行任何更改(就像我过去所做的那样)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM