why am I getting small "jacoco.xml" files from my coverage tests?

1,644 views
Skip to first unread message

kvns...@hotmail.com

unread,
Jan 7, 2014, 5:16:36 PM1/7/14
to jac...@googlegroups.com
Currently I'm working on a project that has four components. We need to know the code coverage of just one of those components. We're using JaCoCo and Sonar, but right now the report says we have 0.0% coverage. My lead says that's impossible; he would have expected coverage between 70% and 90%. I have been given the job of finding out why the report is saying 0.0%, and getting it to output the right coverage.

I put together a sample project and used JaCoCo to analyze its coverage, and it worked just fine. It generated a "jacoco.xml" file that had a lot of coverage information on it. When I use Maven to run the tests on our actual project, that generates a "jacoco.xml" file too, but it's only:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.0//EN" "report.dtd">
<report name="Parent">
<sessioninfo id="A-1007000-4b0bf47b" start="1389122416273"
dump="1389122421783"/>
</report>

Policy keeps me from attaching the two actual "pom.xml" files, but at the end of this post I list those two "pom.xml" files with everything but the JaCoCo-relevant parts stripped out. I've obviously changed the names of the respective components to "Parent" and "Child". Can anyone tell me why this is resulting in the "jacoco.xml" file with no coverage information?

Kevin S

##############################################################################

<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<name>Parent</name>
...
<profiles>
<profile>
<id>create-jacoco-reports</id>
<activation>
<property>
<name>component.pipeline</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.5.10.201208310627</version>
<configuration>
<destFile>${project.basedir}/../target/jacoco.exec</destFile>
<append>true</append>
<excludes>
<exclude>**/*Test.*</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>jacoco-intialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>
<build>
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
</plugin>
...
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
...
</project>

##############################################################################

<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<name>Child</name>
...
<build>
...
<plugins>
...
<plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.0</version>
<configuration>
<reportPlugins>
...
<!-- Code Coverage -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
...
</reportPlugins>
</configuration>
</plugin>
...
</plugins>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<!--<groupId>@project.groupId@</groupId>-->
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>@project.version@</version>
</plugin>
...
</plugins>
</reporting>
...
<profiles>
<profile>
<id>coverage-per-test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.13</version>
<configuration>
<properties>
<property>
<name>listener</name>
<value>org.sonar.java.jacoco.JUnitListener</value>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar-plugins.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>cr-ja-re</id>
<activation>
<property>
<name>component.pipeline</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.5.10.201208310627</version>
<configuration>
<destFile>${project.basedir}/../target/jacoco.exec</destFile>
<excludes>
<exclude>**/*Test.*</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>jacoco-intialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>
</project>

Marc R. Hoffmann

unread,
Jan 8, 2014, 12:37:28 AM1/8/14
to jac...@googlegroups.com
Hi,

if the jacoco.xml file is empty this means that no classes are processed
by the report goal.

You're using a quite old version of JaCoCo (0.5.10). I would recommend
to uprade to the latest release (0.6.4.201312101107). Many issues have
been fixed with the Maven plug-in.

Best regards,
-marc

kvns...@hotmail.com

unread,
Jan 8, 2014, 1:48:49 PM1/8/14
to jac...@googlegroups.com
Okay, following the advice of the same co-worker that pointed me to this users group, I also took a look at another project's "pom.xml" files, and modified the mentioned Parent and Child "pom.xml" files accordingly. Then this morning when I came in I replaced the two references to version 0.5.10.201208310627 with 0.6.4.201312101107 as Marc suggested. Then I ran "mvn clean install -P create-jacoco-reports". It finished with a declaration of "BUILD SUCCESS", but when I went looking for a "jacoco.xml" file I couldn't find one anywhere. Yesterday I was getting a "jacoco.xml" file, albeit one too small to be of much use, but now I'm not getting any "jacoco.xml" file at all.

I took a look at the output of the Maven command and did a search on "jacoco" and the interesting results I got are included at the end of this article, followed by the "pom.xml" for the Parent and the "pom.xml" for the Child. Any idea what these messages mean and how I can fix my "pom.xml" files so that my Maven command actually generates a "jacoco.xml"?

Kevin S

##############################################################################

...
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:prepare-agent (agent) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:prepare-agent (pre-test) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:prepare-agent (jacoco-intialize) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:report (report) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
...
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:prepare-agent (agent) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:prepare-agent (pre-test) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:prepare-agent (jacoco-intialize) @ tree-data-parent ---
[INFO] Skipping JaCoCo for project with packaging type 'pom'
...
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:report (report) @ tree-data ---
[INFO] Skipping JaCoCo execution due to missing execution data file
...
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:report (report) @ tree-acceptance-of-ct ---
[INFO] Skipping JaCoCo execution due to missing execution data file
...
-------------------------------------------------------
T E S T S
-------------------------------------------------------
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/familysearch/tree/ws/services/BaseService.
at org.jacoco.agent.rt.internal_6effb9e.CoverageTransformer.transform(CoverageTransformer.java:89)
...
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: java.io.IOException: Error while instrumenting class org/familysearch/tree/ws/services/BaseService.
at org.jacoco.agent.rt.internal_6effb9e.core.instr.Instrumenter.instrumentError(Instrumenter.java:147)
at org.jacoco.agent.rt.internal_6effb9e.core.instr.Instrumenter.instrument(Instrumenter.java:98)
at org.jacoco.agent.rt.internal_6effb9e.CoverageTransformer.transform(CoverageTransformer.java:87)
... 27 more
Caused by: java.lang.IllegalStateException: Missing or invalid stackmap frames.
at org.jacoco.agent.rt.internal_6effb9e.core.internal.instr.FrameTracker.assertValidFrames(FrameTracker.java:613)
at org.jacoco.agent.rt.internal_6effb9e.core.internal.instr.FrameTracker.pop(FrameTracker.java:602)
at org.jacoco.agent.rt.internal_6effb9e.core.internal.instr.FrameTracker.visitVarInsn(FrameTracker.java:386)
at org.jacoco.agent.rt.internal_6effb9e.asm.MethodVisitor.visitVarInsn(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.asm.MethodVisitor.visitVarInsn(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.asm.tree.VarInsnNode.accept(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.asm.tree.InsnList.accept(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.asm.tree.MethodNode.accept(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.core.internal.flow.ClassProbesAdapter$1.visitEnd(ClassProbesAdapter.java:124)
at org.jacoco.agent.rt.internal_6effb9e.asm.ClassReader.b(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_6effb9e.core.instr.Instrumenter.instrument(Instrumenter.java:78)
at org.jacoco.agent.rt.internal_6effb9e.core.instr.Instrumenter.instrument(Instrumenter.java:96)
... 28 more
...
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:report (report) @ tree-component-tests ---
[INFO] Skipping JaCoCo execution due to missing execution data file
...
[INFO] --- jacoco-maven-plugin:0.6.4.201312101107:report (report) @ tree-data-acceptance ---
[INFO] Skipping JaCoCo execution due to missing execution data file
...

##############################################################################

<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<name>Parent</name>
...

<properties>
...
<jacoco.argLine/>
...
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
...
<sonar.java.codeCoveragePlugin>jacoco</sonar.java.codeCoveragePlugin>
<sonar.jacoco.reportPath>${project.basedir}/../tree-component-tests/target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
...
<jacoco.version>0.6.3.201306030806</jacoco.version>
...
</properties>


<profiles>
<profile>
<id>create-jacoco-reports</id>
<activation>
<property>
<name>component.pipeline</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>

<version>0.6.4.201312101107</version>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${versions-maven-plugin.version}</version>
<configuration>
...
<properties>
...
<property>
<name>jacoco-maven-plugin.version</name>
<version>[0.5.6.0,)</version>
</property>
...
</properties>
</configuration>
</plugin>


...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>

<version>${jacoco.version}</version>


<configuration>
<destFile>${project.basedir}/../target/jacoco.exec</destFile>
<append>true</append>
<excludes>
<exclude>**/*Test.*</exclude>
</excludes>
</configuration>
<executions>
<execution>

<id>agent</id>


<goals>
<goal>prepare-agent</goal>
</goals>
</execution>

</executions>

##############################################################################

<properties>
...
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.jacoco.reportPath>${project.basedir}/../tree-component-tests/target/jacoco.exec</sonar.jacoco.reportPath>
...
<jacoco.argLine />
<surefirePlusJacoco.argLine>${surefire.argLine} ${jacoco.argLine}</surefirePlusJacoco.argLine>
</properties>

<build>
<pluginManagement>


<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>

<version>${jacoco.version}</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
<excludes>
<exclude>org/familysearch/functest/*.class</exclude>
</excludes>
</configuration>
<executions>
<execution>


<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>

</pluginManagement>
...


<plugins>
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>

</plugin>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.0</version>
<configuration>
<reportPlugins>
...

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
...
</reportPlugins>
</configuration>
</plugin>
...
</plugins>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<!--<groupId>@project.groupId@</groupId>-->
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>@project.version@</version>
</plugin>
...
</plugins>
</reporting>
...

</profiles>

<version>0.6.4.201312101107</version>

kvns...@hotmail.com

unread,
Jan 9, 2014, 12:58:26 PM1/9/14
to jac...@googlegroups.com, kvns...@hotmail.com
Today I noticed that the "jacoco.exec" file was now in the Parent's "target" directory, so I changed each of my references to "jacoco.exec" to point to it. Then when I ran "mvn clean install -P create-jacoco-reports" and noted that it declared a successful build, it did generate a "jacoco.xml" file, but the tiny one again, with just contents:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<DOCTYPE report SYSTEM "report.dtd" PUBLIC "-//JACOCO/DTD Report 1.0//EN">
<report name="Parent">
<sessioninfo dump="1389289493869" start="1389289427703"
id="A-1007000-72927de2"/>
</report>

I'm also still getting several cases where the Maven output says, "Skipping JaCoCo for project with packaging type 'pom'", it's still complaining, "Skipping JaCoCo execution due to missing execution data file", and in the TESTS
section I'm still getting:

java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/maven/surefire/booter/ForkedBooter.
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:89)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Caused by: java.io.IOException: Error while instrumenting class org/apache/maven/surefire/booter/ForkedBooter.
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrumentError(Instrumenter.java:147)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:98)
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:87)
... 14 more
Caused by: java.lang.IllegalStateException: Class org/apache/maven/surefire/booter/ForkedBooter is already instrumented.
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:81)
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:79)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassVisitor.visitField(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.a(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:78)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:96)
... 15 more
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/maven/surefire/booter/SystemPropertyManager.
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:89)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:65)
Caused by: java.io.IOException: Error while instrumenting class org/apache/maven/surefire/booter/SystemPropertyManager.
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrumentError(Instrumenter.java:147)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:98)
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:87)
... 15 more
Caused by: java.lang.IllegalStateException: Class org/apache/maven/surefire/booter/SystemPropertyManager is already instrumented.
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:81)
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:79)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassVisitor.visitField(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.a(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:78)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:96)
... 16 more
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/maven/surefire/booter/PropertiesWrapper.
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:89)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.maven.surefire.booter.SystemPropertyManager.loadProperties(SystemPropertyManager.java:56)
at org.apache.maven.surefire.booter.SystemPropertyManager.loadProperties(SystemPropertyManager.java:62)
at org.apache.maven.surefire.booter.SystemPropertyManager.setSystemProperties(SystemPropertyManager.java:69)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:65)
Caused by: java.io.IOException: Error while instrumenting class org/apache/maven/surefire/booter/PropertiesWrapper.
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrumentError(Instrumenter.java:147)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:98)
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:87)
... 18 more
Caused by: java.lang.IllegalStateException: Class org/apache/maven/surefire/booter/PropertiesWrapper is already instrumented.
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:81)
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:79)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassVisitor.visitField(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.a(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:78)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:96)
... 19 more
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/maven/surefire/booter/BooterDeserializer.
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:89)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70)
Caused by: java.io.IOException: Error while instrumenting class org/apache/maven/surefire/booter/BooterDeserializer.
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrumentError(Instrumenter.java:147)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:98)
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:87)
... 15 more
Caused by: java.lang.IllegalStateException: Class org/apache/maven/surefire/booter/BooterDeserializer is already instrumented.
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:81)
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:79)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassVisitor.visitField(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.a(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:78)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:96)
... 16 more
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class org/apache/maven/surefire/booter/TypeEncodedValue.
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:89)
at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.maven.surefire.booter.PropertiesWrapper.getFileProperty(PropertiesWrapper.java:86)
at org.apache.maven.surefire.booter.BooterDeserializer.deserialize(BooterDeserializer.java:70)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:71)
Caused by: java.io.IOException: Error while instrumenting class org/apache/maven/surefire/booter/TypeEncodedValue.
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrumentError(Instrumenter.java:147)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:98)
at org.jacoco.agent.rt.internal_9dd1198.CoverageTransformer.transform(CoverageTransformer.java:87)
... 17 more
Caused by: java.lang.IllegalStateException: Class org/apache/maven/surefire/booter/TypeEncodedValue is already instrumented.
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:81)
at org.jacoco.agent.rt.internal_9dd1198.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:79)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassVisitor.visitField(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.a(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:78)
at org.jacoco.agent.rt.internal_9dd1198.core.instr.Instrumenter.instrument(Instrumenter.java:96)
... 18 more

Can anyone tell me why this is happening, and what I need to do to get JaCoCo to calculate my Child component's code coverage?

Kevin S

Marc R. Hoffmann

unread,
Jan 9, 2014, 1:05:10 PM1/9/14
to jac...@googlegroups.com
Hi Kevin,

one problem is obiously exactly what the error message says:

Class org/apache/maven/surefire/booter/TypeEncodedValue is already instrumented.

Looks like you use the JaCoCo agent on offline-instrumented classes. You
can either instrument classes beforehand or use the JaCoCo Java agent
(the latter is the recommended way).

Cheers,
-marc

kvns...@hotmail.com

unread,
Jan 10, 2014, 2:53:27 PM1/10/14
to jac...@googlegroups.com
On Thursday, January 9, 2014 11:05:10 AM UTC-7, Marc R. Hoffmann wrote:
> Hi Kevin,
>
> one problem is obiously exactly what the error message says:
>
> Class org/apache/maven/surefire/booter/TypeEncodedValue is already instrumented.
>
> Looks like you use the JaCoCo agent on offline-instrumented classes. You
>
> can either instrument classes beforehand or use the JaCoCo Java agent
>
> (the latter is the recommended way).
>
> Cheers,
>
> -marc

My preference would be to do it the recommended way. What do I need to do to my "pom.xml" to keep it from instrumenting the classes beforehand?

Kevin S

Marc R. Hoffmann

unread,
Jan 10, 2014, 4:16:35 PM1/10/14
to jac...@googlegroups.com
Hi Kevin,

I can't spot the issue with your pom.xml. Another possible reason is
that you get two JaCoCo agents on the same JVM command line. You can
debug this by running Maven with the -X option. You should see the
command line executiong your tests.

Cheers,
-marc

kvns...@hotmail.com

unread,
Jan 13, 2014, 12:15:07 PM1/13/14
to jac...@googlegroups.com
On Friday, January 10, 2014 2:16:35 PM UTC-7, Marc R. Hoffmann wrote:

> Hi Kevin,
>
>
>

> I can't spot the issue with your pom.xml. Another possible reason is
>
> that you get two JaCoCo agents on the same JVM command line. You can
>
> debug this by running Maven with the -X option. You should see the
>
> command line executiong your tests.
>
>
>
> Cheers,
>
> -marc

I executed "mvn -e -X clean install -P create-jacoco-reports" as you suggested. What exactly am I searching for in attempting to find the command line? I did a search on "java", but I couldn't find anything that looked like a command line.

Kevin S

Marc R. Hoffmann

unread,
Jan 14, 2014, 1:32:29 AM1/14/14
to jac...@googlegroups.com
Hi Kevin,

if you use Maven surefire you should see the following entry in you log
file when running with -X:

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Forking command line: ...

If you're using a different test runner you might ask them how to debug
the command line and how to add VM arguments.

Best regards,
-marc

kvns...@hotmail.com

unread,
Jan 14, 2014, 11:12:52 AM1/14/14
to jac...@googlegroups.com
On Monday, January 13, 2014 11:32:29 PM UTC-7, Marc R. Hoffmann wrote:

> Hi Kevin,
>
>
>

> if you use Maven surefire you should see the following entry in you log
>
> file when running with -X:
>
>
>
> -------------------------------------------------------
>
> T E S T S
>
> -------------------------------------------------------
>
> Forking command line: ...
>
>
>
> If you're using a different test runner you might ask them how to debug
>
> the command line and how to add VM arguments.
>
>
>
> Best regards,
>
> -marc

Marc, thanks. I ran "mvn -e -X clean install -P create-jacoco-reports" and did a search in the output for "Forking command line". I found two occurrences. The first occurrence didn't mention "jacoco" at all; the second occurrence was:

Forking command line: cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_45\jre\bin\java" -javaagent:C:\\Users\\kvnsmnsn\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.6.4.201312101107\\org.jacoco.agent-0.6.4.201312101107-runtime.jar=destfile=C:\\Sandbox\\tree-data\\tree-component-tests\\target\\jacoco.exec,append=true,excludes=**/*Test.* -jar C:\Sandbox\tree-data\tree-component-tests\target\surefire\surefirebooter2678885626514837581.jar C:\Sandbox\tree-data\tree-component-tests\target\surefire\surefire111834554190895649tmp C:\Sandbox\tree-data\tree-component-tests\target\surefire\surefire_14147398117733366817tmp"

"jacoco" gets mentioned three times on this line, but it all appears to be part of the same argument. Does this look like a problem to you, something that I should change?

Kevin S

Marc Hoffmann

unread,
Jan 14, 2014, 1:47:05 PM1/14/14
to jac...@googlegroups.com
Hi Kevin,

the command line looks good. So, is the following file written?

C:\\Sandbox\\tree-data\\tree-component-tests\\target\\jacoco.exec

Can you please open the file (e.g. with Eclipse with EclEmma installed)
and check whether execution data has been sampled for your classes under
test?

Best regards,
-marc
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages