我有一个大约150k LOC的大中型项目。 Jacoco maven-plugin为jacoco.exec文件生成每个单元测试的报告。
所以,基本上这是pom.xml中的万无一失的设置:
<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>
棘手的部分是JUnitListener。目标jacoco.exec文件变为4,5 Gb大(巨大!)。一旦我们的Jenkins CI奴隶开始处理文件,声纳运行器(maven artifact)也会尝试将整个文件加载到内存中 - 或者看起来如此。这需要大小为8 gig ..这似乎完全错了,不是吗?
这里的问题是,可以做些什么来最小化jacoco.exec的大小?我们仅限于Java 1.6 SDK(注意到Java 1.7的大小变为&lt; 2 Gb)。我猜测调试符号是创建覆盖率报告的必要条件,还是我错了?
答案 0 :(得分:0)
运行前清理jacoco .exec文件。似乎jacoco附加到现有文件。添加jacoco侦听器会显着增加文件大小。几次运行后你就得到了GB文件。我也经历过sonarqube无法使用&gt;解析文件4GB。或者你可以探索set append to false。这是一个例子:
test {
jacoco {
append = false
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
}
}