0

我有一个大约 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)。我猜调试符号是创建覆盖报告的必要条件还是我错了?

4

1 回答 1

0

运行前清理 jacoco .exec 文件。似乎 jacoco 正在附加到现有文件。添加 jacoco 侦听器会显着增加文件大小。几次运行后,您将获得 GB 文件。我也经历过 sonarqube 无法解析大于 4 GB 的文件。或者你可以explizit set append 为false。这是一个梯度示例:

test {
    jacoco {
        append = false
        destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
    }
}
于 2016-09-06T08:09:49.543 回答