繁体   English   中英

SonarQube不接受外部生成的JaCoCo IT报告报告

[英]SonarQube not accepting externally generated JaCoCo report for IT coverage

至少可以说,我尝试解决这个问题一直很费劲,而且我已经浏览了我能在网上找到的每一份支持文件。 我会正确的。 我们正在运行黑盒测试......很多黑盒测试......从它们生成代码覆盖的唯一方法是将JaCoCo代理以旧式的方式传递给JVM。

我们没有使用故障安全来运行这些测试,而是使用内部套件。 这是一个多模块maven项目,这意味着这个JaCoCo exec文件是在groupId / artifactId层次结构中生成的:

  • / COM / myCompany中/ artifact1 / ...
  • / COM / myCompany中/ artifact2 / ...

等等。

但是,项目中继线显然不符合这种结构。 从像这样的exec文件手动生成HTML报告有点棘手(因为你只能将它提供给一个源目录,并且它希望在根目录中看到一个“com”文件夹)但是它非常合理,非常可能,并已完成。

但是,当我们用参数触发声纳分析时

-Dsonar.itReportPath=/opt/jacoco/it-report.exec -Dsonar.dynamicAnalysis=reuseReports

Sonar JaCoCo插件令人失望:

[INFO] [21:34:28.406] Sensor JaCoCoItSensor...
[INFO] [21:34:28.406] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /opt/jacoco/it-report.exec
[INFO] [21:34:28.444] No information about coverage per test.

这些理论现在变得疯狂,但我想在此之前尝试另一个不幸事件,因为我们的构建过程有一百个移动部件并且无缘无故地重新配置它会浪费许多工作时间。

这是如此令人沮丧的原因是因为我发现在Sonar中处理IT覆盖的几乎所有解决方案似乎遵循相同的blasé公式:

  1. 将JaCoCo代理附加到JVM
  2. 定义指向报告的sonar.jacoco.itReportPath属性
  3. 按按钮
  4. 享受IT覆盖

我们正在使用SonarQube 3.6.1,我们将尽快尝试升级到4.5。 这是第一步。 与此同时,任何人都知道这笔交易是什么,为什么Sonar不会重复使用这份报告? 目录层次结构是否很重要? 找到嵌套在文件树中的groupID文件夹并不难。 这是一个可以通过升级到4.5来解决的问题吗?

我几乎没气了,我会感激任何我能得到的东西。

编辑1:尝试从代理分析中将第三方罐子列入黑名单。 这将是一个痛苦。 我不确定JaCoCo代理-include标志是否会自动排除该范围之外的任何内容,但是可能更容易将自己的功能构建到JaCoCo中,而不是通过挖掘那么多的第三方groupId并将它们全部列入黑名单(然后必须保持这一切。)

我很好的感觉,当SonarQube看到第三方报道时,它会拒绝exec文件。

编辑2:成功将JaCoCo分析列入黑名单的第三方课程。

[INFO] [10:34:05.347] Sensor JaCoCoItSensor...
[INFO] [10:34:05.352] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /opt/jacoco/it-report.exec
[INFO] [10:34:06.179] No information about coverage per test.

不。

因为我使用maven surefire来执行jacoco,所以我无法提供一个很好的解释,但我确实设法使它适用于多模块项目

  1. 将jacoco junit听众添加到surefire和
  2. 确保将报告写入一个位置,每次运行都会附加报告。

我在想第二部分可能对你有用(即将结果附加到一个位置)

如果您需要灵感,请在下面找到我使用过的资料。

  <profile>
  <!-- ========================================================================= -->
  <!-- Use shared code coverage report in sonarQube -->
  <!-- This profile enables cross project coverage reports, -->
  <!-- ========================================================================= -->
  <id>sonar-jacoco-analysis</id>
  <properties>
    <!-- Sonar -->
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.language>java</sonar.language>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.6.3.201306030806</version>
        <configuration>
          <destFile>${sonar.jacoco.reportPath}</destFile>
          <append>true</append>
        </configuration>
        <executions>
          <execution>
            <id>agent</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <!-- Minimal supported version is 2.4 -->
        <version>2.13</version>
        <configuration>
          <properties>
            <property>
              <name>listener</name>
              <value>org.sonar.java.jacoco.JUnitListener</value>
            </property>
          </properties>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.codehaus.sonar-plugins.java</groupId>
      <artifactId>sonar-jacoco-listeners</artifactId>
      <version>1.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</profile>

暂无
暂无

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

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