We want to merge execution data files generated on different envs (one generated on Linux for selenium and other generated on Windows for jUnits) to get a combined coverage report. We are using ANT, "jacoco:merge" is being run on Windows. We have copied jacoco.exec from Linux to Windows and trying to merge the files.
Hi Marc,
Here is the complete stacktrace
[jacoco:merge] Loading execution data file E:\test\jacoco.exec
BUILD FAILED
E:\test\build.xml:571: Unable to read E:\test\jacoco.exec
at org.jacoco.ant.MergeTask.load(MergeTask.java:87)
at org.jacoco.ant.MergeTask.execute(MergeTask.java:67)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
at org.apache.tools.ant.Main.runBuild(Main.java:854)
at org.apache.tools.ant.Main.startAnt(Main.java:236)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)
Caused by: java.io.IOException: Unknown block type a.
at org.jacoco.core.data.ExecutionDataReader.readBlock(ExecutionDataReade
r.java:116)
at org.jacoco.core.data.ExecutionDataReader.read(ExecutionDataReader.jav
a:87)
at org.jacoco.core.tools.ExecFileLoader.load(ExecFileLoader.java:59)
at org.jacoco.ant.MergeTask.load(MergeTask.java:85)
... 17 more
Below is my ANT target. In this mod1 jacoco.exec file was copied from a linux box and mod2 jacoco.exec files were generated on same windows m/c where merge target is run.
<target name="merge-all-modules">
<jacoco:merge destfile="${mytest.dir}/target/merged.exec">
<fileset dir="${mytest.dir}/target/mod2" includes="jacoco.exec" />
<fileset dir="${mytest.dir}/target/mod1" includes="*.exec" />
</jacoco:merge>
<jacoco:report>
<executiondata>
<file file="${mytest.dir}/target/merged.exec" />
</executiondata>
<structure name="MyTestPrj">
<group name="module1">
<classfiles>
<fileset dir="${mytest.dir}/output/classes"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${mytest.dir}/source"/>
</sourcefiles>
</group>
<group name="module2">
<classfiles>
<fileset dir="${mytest.dir}/output/mod1classes"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${mytest.dir}/mod1src"/>
</sourcefiles>
</group>
</structure>
<html destdir="${mytest.dir}/target/output" />
</jacoco:report>
</target>
Exception in thread "main" java.io.IOException: Unknown block type a.
at org.jacoco.core.data.ExecutionDataReader.readBlock(ExecutionDataReader.java:116)
at org.jacoco.core.data.ExecutionDataReader.read(ExecutionDataReader.java:87)
at com.jda.nextgen.ua.widthndepth.JacocoDiag.dump(JacocoDiag.java:64)
at com.jda.nextgen.ua.widthndepth.JacocoDiag.execute(JacocoDiag.java:38)
at com.jda.nextgen.ua.widthndepth.JacocoDiag.main(JacocoDiag.java:89)
I created this file passing -javaagent:/usr1/vendor/jacoco/lib/jacocoagent.jar=destfile=/usr1/jacococoverage/jacoco.exec,includes=com.myapp.* as javaopts to catalina.bat and this file was written when the server is stopped.