我有一个大约 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 slaves 开始处理文件,声纳运行器(maven artifact)就会尝试将整个文件加载到内存中——或者看起来是这样。这需要 8 gig 的堆大小。这似乎完全错误,不是吗?
这里的问题是,可以做些什么来最小化 jacoco.exec 的大小吗?我们仅限于 Java 1.6 SDK(注意到 Java 1.7 的大小变为 < 2 Gb)。我猜调试符号是创建覆盖报告的必要条件还是我错了?