This example illustrates the step required to use the jacocotogo maven plugin to retrieve coverage information from multiple sources, and optionally, merge the data into a single file.
The JVM which you wish to obtain coverage metrics from must be instrumented at runtime via the JaCoCo Java Agent. Additionally, one of the following options is required:
-javaagent:[yourpath/]jacocoagent.jar=output=tcpserver,address=*,port=6300
-javaagent:[yourpath/]jacocoagent.jar=jmx=true
Further Instructions for configuring the JaCoCo java agent are available at: http://www.eclemma.org/jacoco/trunk/doc/agent.html.
To retrieve coverage metrics from multiple remote JVMs after integration tests have completed:
... <build> <plugins> <plugin> <groupId>org.helmetsrequired</groupId> <artifactId>jacocotogo-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>get_integration_test_coverage</id> <phase>post-integration-test</phase> <goals> <goal>batch</goal> </goals> <configuration> <!-- global parameters, apply to all sources --> <!-- will not fail the build if data can not be retrieved from server(s). This parameter is optional and defaults to 'false'. --> <failOnError>false</failOnError> <!-- create a merged file with data from all sources. This parameter is optional and defaults to 'false'. --> <merge>true</merge> <!-- the path specified below is the default location and may be omitted --> <mergeFile>${project.build.directory}/jacocotogo/merged.exec</mergeFile> <!-- end global parameters --> <!-- a list of locations from which JaCoCo execution data should be retrieved --> <sources> <!-- this source will fetch via TCP. --> <source> <!-- tcp or jmx to specify how data should be retrieved. Not required when 'serviceURL' is set.... See example below. --> <type>tcp</type> <!-- the hostname where the remote JVM is located. Not required when 'serviceURL' is set.... See example below. --> <hostname>myserver.mydomain.com</hostname> <!-- port from which JaCoCo execution data can be retrieved. Either via tcp or via jmx --> <port>12345</port> <!-- optional specification of where JaCoCo execution data will be written. Defaults to '${project.build.directory}/jacocotogo/jacoco[n].exec' where [n] is an integer representing the index of the 'source' --> <outputFile>${project.build.directory}/jacocotogo/myserver_jacoco.exec</outputFile> <!-- optional parameter specifying whether JaCoCo coverage statistics should be reset after data is fetched. Defaults to true --> <resetAfterFetch>true</resetAfterFetch> </source> <!-- this source is identical to above, but specified using serviceURL --> <source> <serviceURL>tcp://myserver.mydomain.com:12345</serviceURL> <outputFile>${project.build.directory}/jacocotogo/myserver_jacoco.exec</outputFile> <resetAfterFetch>true</resetAfterFetch> </source> <!-- this source will fetch via JMX --> <source> <type>jmx</type> <hostname>myserver.mydomain.com</hostname> <port>12345</port> <outputFile>${project.build.directory}/jacocotogo/myserver_jacoco.exec</outputFile> <resetAfterFetch>false</resetAfterFetch> <!-- username to use to authenticate with JMX server. Only required if JMX authentication is enabled. --> <username>myuser</username> <!-- password to use to authenticate with JMX server. Only required if JMX authentication is enabled. --> <password>mypassword</password> </source> <!-- this source is identical to above, but specified using serviceURL --> <source> <serviceURL>service:jmx:rmi:///jndi/rmi://myserver.mydomain.com:12345/jmxrmi</serviceURL> <outputFile>${project.build.directory}/jacocotogo/myserver_jacoco.exec</outputFile> <resetAfterFetch>false</resetAfterFetch> <username>myuser</username> <password>mypassword</password> </source> </sources> </configuration> </execution> </executions> </plugin> ... </plugins> ... </build> ...