SonarQube Java::JaCoCo侦听器生成巨大的JaCoCo.exec报告
我有一个规模从中到大的项目,大约有150k LOC。jacocomaven插件生成每个单元测试的报告,并将其保存到Jacoco.exec文件中 因此,基本上这是pom.xml中的surefire设置:SonarQube Java::JaCoCo侦听器生成巨大的JaCoCo.exec报告,java,maven,jenkins,jacoco,jacoco-maven-plugin,Java,Maven,Jenkins,Jacoco,Jacoco Maven Plugin,我有一个规模从中到大的项目,大约有150k LOC。jacocomaven插件生成每个单元测试的报告,并将其保存到Jacoco.exec文件中 因此,基本上这是pom.xml中的surefire设置: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
<includes>
<include>**/*Test.java</include>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/it/*IT.java</exclude>
<exclude>**/*IT.java</exclude>
</excludes>
<properties>
<property>
<name>listener</name>
<value>org.sonar.java.jacoco.JUnitListener</value>
</property>
</properties>
</configuration>
</plugin>
<plugin>
org.apache.maven.plugins
maven surefire插件
2.17
-XX:-使用拆分验证器
**/*Test.java
**/*Tests.java
**/it/*it.java
**/*IT.java
听众
org.sonar.java.jacoco.JUnitListener
棘手的部分是JUnitListener。目标jacoco.exec文件变为4,5 Gb大(巨大!)。一旦我们的Jenkins CI奴隶开始处理该文件,sonar runner(以及maven工件)就会尝试将整个文件加载到内存中——或者看起来是这样。这要求堆大小为8Gig。。这似乎是完全错误的,不是吗
这里的问题是,可以采取任何措施来最小化jacoco.exec的大小吗?我们仅限于Java1.6SDK(注意到Java1.7的大小变得<2GB)。我猜调试符号是创建覆盖率报告的必要条件,还是我错了?在运行之前清理jacoco.exec文件。似乎jacoco正在附加到现有文件。添加jacoco侦听器会显著增加文件大小。运行几次后,您得到了GB文件。我还经历过sonarqube无法解析大于4 GB的文件。或者,您可以将解释集append to false。这是一个gradle示例:
test {
jacoco {
append = false
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
}
}
是编译期间需要调试。嗯,我从未见过.exec文件超过几MB。决定.exec文件大小的关键是我们的“每个测试的覆盖率”配置文件。我插入了上面带有额外缩进的
部分。在测试阶段(junit)监视文件大小表明为每个测试注入了VM状态的转储。我读过,它分为成功/失败-但这就是我所知道的全部过程基本上没有人有过这个问题的经验?