【发布时间】:2015-01-18 06:10:21
【问题描述】:
我有一个大约 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 的大小变为
【问题讨论】:
-
是的,编译期间需要调试。嗯,我从未见过 .exec 文件超过几 MB。
-
.exec 文件大小的关键是我们的“每次测试覆盖率”配置文件。我在上面插入了
<properties>部分,并带有额外的缩进。在测试阶段(junit)监视文件大小表明为每个测试注入了 VM 状态的转储。我读过,它分为成功/失败——但这就是我对这个过程的了解基本 -
bump 没有人遇到过这个问题?
标签: java maven jenkins jacoco jacoco-maven-plugin