我正在使用 jacoco:report 标记生成 jacoco 报告。我收到如下错误:
[jacoco:report] Classes in bundle 'Code Coverage Report' do no match with execution data. For report generation the same class files must be used as at runtime.
[jacoco:report] Execution data for class xxxxx does not match.
[jacoco:report] Execution data for class yyyyy does not match.
蚂蚁报告目标看起来像:
<target name="report">
<jacoco:report>
<executiondata>
<file file="${jacocoexec.dir}/${jacocoexec.filename}"/>
</executiondata>
<!-- the class files and optional source files ... -->
<structure name="Code Coverage Report">
<classfiles>
<fileset file="./jar/abc.jar"/>
</classfiles>
<sourcefiles>
<fileset dir="./code/src"/>
</sourcefiles>
</structure>
<!-- to produce reports in different formats. -->
<html destdir="${jacoco.report.dir}"/>
</jacoco:report>
</target>
abc.jar
./code/src
生成。那为什么会出现这样的错误。任何想法?
原文由 Nishant Lakhara 发布,翻译遵循 CC BY-SA 4.0 许可协议
您收到与 classID 相关的错误。这是 JaCoCo 文档站点上详细描述的概念。 http://www.eclemma.org/jacoco/trunk/doc/classids.html 。这是在同一 JVM 中支持类的多个版本(例如应用程序服务器)的关键步骤。
为了可见性,在这里复制它的一部分。
什么是类 ID,它们是如何创建的?
什么会导致不同的类 ID?
不同的编译器供应商(例如 Eclipse 与 Oracle JDK)
不同的编译器版本
不同的编译器设置(例如调试与非调试)
此外,后处理类文件(混淆、AspectJ 等)通常会更改类文件。如果您只是将相同的类文件用于运行时和分析,JaCoCo 将工作得很好。所以创建这些类文件的工具链并不重要。
即使文件系统上的类文件相同,JaCoCo 运行时代理看到的类也有可能是不同的。当在 JaCoCo 代理或特殊类加载器预处理类文件之前配置另一个 Java 代理时,通常会发生这种情况。典型的候选人是:
同一页涵盖了可能的解决方案。
存在哪些解决方法来处理运行时修改的类?
如果在您的设置中类在运行时被修改,则有一些解决方法可以使 JaCoCo 正常工作:
编辑于 22-02-2017
如何使用离线检测: 使用 Daniel Atallah 提供的以下任务。
现在使用
"gradlew test jacocoTestReport"
命令生成报告。