Main Tutorials

Emma – Class x appears to be instrumented already

Review the “maven-emma-plugin” in pom.xml :

pom.xml

<project>
  //...
  <build>
    <plugins>
		
	<plugin>
		<groupId>org.codehaus.mojo</groupId>
		<artifactId>emma-maven-plugin</artifactId>
		<version>1.0-alpha-3</version>
		<inherited>true</inherited>
		<executions>
			<execution>
				<phase>process-classes</phase>
				<goals>
					<goal>instrument</goal>
				</goals>
			</execution>
		</executions>
	</plugin>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-surefire-plugin</artifactId>
		<inherited>true</inherited>
		<configuration>
			<forkMode>once</forkMode>
			<reportFormat>xml</reportFormat>
			<classesDirectory>
                           ${project.build.directory}/generated-classes/emma/classes
                        </classesDirectory>
		</configuration>
	</plugin>

	</plugins>
  </build>
</project>

1. Problem

When I run the command mvn emma:emma to generate the code coverage report, it prompts x class is instrumented already?


Failed to execute goal org.codehaus.mojo:emma-maven-plugin:1.0-alpha-3:instrument 
        (default-cli) 
	on project MkyongEmma: Execution default-cli of 
	goal org.codehaus.mojo:emma-maven-plugin:1.0-alpha-3:instrument failed: 
	class [com.mkyongemma.config.xxx] appears to be instrumented already -> [Help 1]

Try to exclude the problem class x from the build, but other classes also hit the same instrumented already error?

pom.xml

<build>
 <plugins>

  <plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>emma-maven-plugin</artifactId>
	<version>1.0-alpha-3</version>
	<inherited>true</inherited>
	<executions>
	   <execution>
	       <phase>process-classes</phase>	
	        <configuration>
		  <filters>
			<filter>-com.mkyongemma.config.*</filter>
		  </filters>
	        </configuration>
		<goals>
		  <goal>instrument</goal>
		</goals>
	   </execution>
	</executions>
  </plugin>

 </plugins>
</build>		

2. Solution

The problem is, when you run the command mvn emma:emma directly, the command line “Emma plugin” is started and instrumented the classes, while the other “Emma plugin” which declared in the pom.xml build section, will be started next and try to instrument the classes again. The error message is coming from the second “Emma plugin”, which try to instrument an instrumented already class.

P.S Try to trace the process behind with the Maven debug command mvn -X emma:emma

To solve it :

Solution 1
Remove the “emma-maven-plugin” from your pom.xml build section. Try running mvn -X emma:emma again. It should work fine and generate the code coverage report at ${project}\target\site\emma\.

Solution 2
If you want to include the “emma-maven-plugin” in the build section, use mvn package instead, to avoid the “emma-maven-plugin” running 2 times.


mvn package

References

  1. Stackoverflow : How do I exclude classes from being instrumented by the maven-emma plugin
  2. How To Display Maven Plugin Goals And Parameters
  3. Emma Maven Plugin Official Page
  4. Wikipedia – Apache Maven

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
2 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Aditya Pratap Bhuyan
6 years ago

Please use mode=”overwrite”. It would work fine.

Elad
9 years ago

Excellent!