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>
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>
<?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
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
> 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
> 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