至少可以说,我尝试解决这个问题一直很费劲,而且我已经浏览了我在网上找到的每一份支持文件。我会正确的。我们正在运行黑盒测试......很多黑盒测试......从它们生成代码覆盖的唯一方法是将JaCoCo代理以旧式的方式传递给JVM。
我们没有使用故障安全来运行这些测试,而是使用内部套件。这是一个多模块maven项目,这意味着这个JaCoCo exec文件是在groupId / artifactId层次结构中生成的:
等等。
但是,项目中继线显然不符合这种结构。从像这样的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é公式:
我们正在使用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.
不。
答案 0 :(得分:1)
由于我使用maven surefire来执行jacoco,我无法提供很好的解释,但是当我
时,我确实设法使其适用于多模块项目我在想第二部分对你有用(即将结果附加到一个地方)
如果您需要灵感,请在下面找到我使用的个人资料。
<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>