【发布时间】:2015-07-30 09:35:30
【问题描述】:
我正在使用 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.
ant 报告目标如下:
<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。那为什么会出现这样的错误。有什么想法吗?
【问题讨论】:
-
添加executiondata(
${jacocoexec.filename})是如何生成的?应该有单独的目标来执行jacoco:coverage任务。对这个目标也提出质疑。 -
通过在运行测试用例时添加 -javaagent 参数:-javaagent:JaCoCoProject/lib/jacocoagent.jar=destfile=JaCoCoProject/jacoco.exec,output=file
-
请分享完整的构建文件。所有这些错误都在说你检测了一个 jar,运行了测试——这些类不是来自“./jar/abc.jar”——仅仅通过名称匹配这些类是不够的。它们必须与 jacoco 看到的“classID”相匹配——这意味着即使你重新编译,这些类也是不同的。
-
@Jayan : 在相同的代码上重新编译是否会改变 jar 中的内容?
-
是的——从 jacoco 的角度来看。它计算出二进制的哈希值——每次编译时都不同——可能是由于时间戳。