【问题标题】:Sonar maven jacoco code coverage for Multimodule project多模块项目的声纳 maven jacoco 代码覆盖率
【发布时间】:2014-10-03 21:53:30
【问题描述】:

我有一个多模块项目,其中包含一个父 pom.xml 和两个模块。 Project.jar 和 Project.war。所有的测试用例都在 Project.jar 下。当我在 Parent 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。

【问题讨论】:

  • 你能准确地说出你正在使用的java插件的版本吗?
  • 声纳 java 插件 2.4
  • @benzonico - 我在父 pom 和子 jar 和 war pom 中添加了 jacoco 插件,sonar.sources 作为 src/main 用于多语言分析。
  • 有什么线索吗?请帮忙
  • @benzonico 你能帮忙吗?

标签: java maven code-coverage sonarqube jacoco


【解决方案1】:

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

【讨论】:

  • 我将我的 java 插件更改为 2.1,并将 jacoco 插件添加到 Sonarqube 4.2。现在测试用例与构建阶段以及声纳目标一起运行。我正在使用詹金斯。所以测试结果被 Sonar 覆盖,运行测试用例失败了大多数测试。覆盖值错误。我添加了 sonar.dynamicAnalysis=true 和 sonar.reuseReports=true。
  • 通过更改插件版本修复了该问题。 sonar-surefire-plugin-2.1, sonar-squid-java-plugin-2.1, sonar-jacoco-plugin-2.1, sonar-checkstyle-plugin-2.1, sonar-build-stability-plugin-1.2, sonar-pmd-plugin- 2.1,声纳-findbugs-plugin-2.1,声纳-java-plugin-2.1。在这些版本中,sonar 会自动运行 jacoco 并创建报告。
  • 但是我建议使用最新版本的插件并在分析之前生成 jaCoCo 报告。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 2012-12-12
    • 1970-01-01
    • 2017-06-07
    • 2017-06-24
    • 2021-09-10
    • 2018-09-22
    • 2021-07-21
    • 2013-03-21
    相关资源
    最近更新 更多