Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Java JaCoCo插件提供了不同的覆盖范围_Java_Maven_Jenkins_Jacoco_Jacoco Maven Plugin - Fatal编程技术网

Java JaCoCo插件提供了不同的覆盖范围

Java JaCoCo插件提供了不同的覆盖范围,java,maven,jenkins,jacoco,jacoco-maven-plugin,Java,Maven,Jenkins,Jacoco,Jacoco Maven Plugin,我正在使用jacomaven插件和代理来测量和检索每晚测试的应用程序的代码覆盖率数据。 这是体系结构的模式: 我的Maven项目配置为在Mavenverify阶段执行一些API测试。 Jenkins服务器执行的Maven命令如下 mvn verify org.jacoco:jacoco-maven-plugin:0.7.8:dump sonar:sonar -Djacoco.address=TEST_SERVER -Djacoco.destFile=/proj/coverage-reports

我正在使用jacomaven插件和代理来测量和检索每晚测试的应用程序的代码覆盖率数据。 这是体系结构的模式:

我的Maven项目配置为在Maven
verify
阶段执行一些API测试。 Jenkins服务器执行的Maven命令如下

mvn verify org.jacoco:jacoco-maven-plugin:0.7.8:dump sonar:sonar -Djacoco.address=TEST_SERVER -Djacoco.destFile=/proj/coverage-reports/jacoco-it.exec -Dsonar.projectKey=sonar_test -Dsonar.projectName=sonar_test -Dsonar.branch=sonar_test -Dsonar.jacoco.itReportPath=/proj/coverage-reports/jacoco-it.exec -Dsonar.java.coveragePlugin=jacoco -Dsonar.language=java
如您所见,首先通过
验证
阶段执行测试,然后
jacoco:dump
目标从测试服务器检索覆盖率数据(我将服务器配置为运行jacoco代理),最后将数据上传到我的Sonar服务器

我的“奇怪”行为是,如果我在我的计算机上运行此命令,然后在SonarQube页面的Jenkins(相应地配置Jenkins项目)上运行此命令,我会得到不同的覆盖结果。此外,如果我配置Jenkins项目,然后简单地复制它,创建一个新的(但等效的)Jenkins项目,结果是不同的


我尝试了不同的配置和案例,但我无法理解问题可能是什么。我是否没有考虑一些JaCoCo约束(例如与Jenkins项目名称相关的约束)?

如问题注释中所述,部署在测试服务器上的工件和在生成报告的
验证
阶段编译的工件必须完全相同,因此代码相同是不够的

为了解决我的问题,我必须与Jenkins一起实施此工作流:

  • 对项目执行
    mvn包
  • 使用Ansible在远程服务器上部署生成的WAR(我们已经在远程机器上使用Ansible进行夜间部署和其他任务)
  • 运行远程测试而不重新编译WAR。为此,我必须添加Maven标志
    -Dmaven.compiler.useIncrementalCompilation=false
    (感谢和提示),以便在
    验证
    阶段不重新编译工件
  • 检索(
    dump
    )JaCoCo覆盖率数据

  • 因此,问题中描述的Maven命令被分为两个命令:一个是创建包的命令,另一个是执行测试并检索JaCoCo数据的命令,而无需重新编译工件。

    很少有详细信息-如何将项目的代码拉到jenkins,结果有什么不同(您是如何看到的?您在哪里看到的)?@nullpointer Jenkins项目被配置为在每次执行时通过“源代码管理”步骤提取代码。本地副本和提取副本之间没有区别,因为没有人在项目上推送任何内容我(作为JaCoCo开发人员)的两个注释:生成报告期间使用的类文件应与类文件匹配(相同)在您的测试服务器上检测以生成
    jacoco it.exec
    -检查这一点。同时向下钻取两个不同的报告,您可以找出导致总体值差异的类-可用于进一步调试。如前所述,远程服务器应运行稍后将进行分析的类生成报告。这种匹配是必需的,因为否则无法保证报告准确显示执行的内容。有关更多详细信息,请参阅。对不起,您的设置非常复杂,因此很难准确地告诉您如何实现这一点。