Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SonarQube Java::JaCoCo侦听器生成巨大的JaCoCo.exec报告_Java_Maven_Jenkins_Jacoco_Jacoco Maven Plugin - Fatal编程技术网

SonarQube Java::JaCoCo侦听器生成巨大的JaCoCo.exec报告

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> <

我有一个规模从中到大的项目,大约有150k LOC。jacocomaven插件生成每个单元测试的报告,并将其保存到Jacoco.exec文件中

因此,基本上这是pom.xml中的surefire设置:

<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状态的转储。我读过,它分为成功/失败-但这就是我所知道的全部过程基本上没有人有过这个问题的经验?