TeamCity On-Premises 2023.11 Help

JaCoCo

TeamCity supports JaCoCo, a Java Code Coverage tool allowing you to measure a wide set of coverage metrics and code complexity.

JaCoCo is available for the following build runners: Ant, IntelliJ IDEA Project, Gradle, and Maven.

Enabling JaCoco coverage

TeamCity supports the Java agent coverage mode allowing you to collect coverage without modifying build scripts or binaries. No additional build steps needed — just choose JaCoCo coverage in a build step which runs tests:

  1. In the Code Coverage section, select JaCoCo as a coverage tool in the Choose coverage runner drop-down menu.

  2. Set up the coverage options — refer to the description of the available options below.

Option

Description

Example

Classfile directories or jars

Newline-delimited set of path patterns in the form of +|-:[path] relative to the checkout directory to scan for classfiles to be analyzed. Libraries and test classfiles don't have to be listed unless their coverage is wanted.

+:target/main/java/**

Classes to instrument

Newline-delimited set of classname patterns in the form of +|-:[path]. Allows filtering out unwanted classes listed in "Classfile directories or jars" field. Useful in case test classes are compiled.

+:com.package.core.*

-:com.package.*Test*

The code coverage results can be viewed on the Overview tab of the Build Results page; detailed report is displayed on the dedicated Code Coverage tab.

Importing JaCoCo coverage data to TeamCity

TeamCity can parse JaCoCo coverage data and generate a report using a service message of the following format:

##teamcity[jacocoReport dataPath='<path to jacoco.exec file>']

TeamCity will use the default JaCoCo version to parse the imported data. Note that if the imported coverage was generated by a different minor version (the second digit in X.X.X), TeamCity won't be able to process its classfiles and collect the coverage. To prevent this, make sure that the default version selected in Administration | Tools | JaCoCo Coverage corresponds to the tool version of the coverage you want to import.
Alternatively, you can specify the required tool version directly in the service message body: ##teamcity[jacocoReport dataPath='coverage_data/jacoco.exec' includes='*' classpath='+:build/classes/java/main/**' toolVersion='X.X.X']. Make sure that the specified version is installed on the TeamCity server.

Attribute

Description

Default value

Example

dataPath

Space-delimited set of paths relative to the checkout directory to read the jacoco data file

jacocoResults/jacoco.exec jacocoResults/anotherJacocoRun.exec

includes

Space-delimited set of classname include patterns

*

com.package.core.* com.package.api.*

excludes

Space-delimited set of classname exclude patterns

com.package.test.* .*Test

sources

Space-delimited set of paths relative to the checkout directory to read sources from. Does not need to be listed by default.

.

src

classpath

Space-delimited set of path patterns in the form of +|-:[path] to scan for classfiles to be analyzed. Libraries and test classfiles do not need to be listed unless their coverage is wanted.

+:**/*

+:target/main/java/**

reportDir

Path to the directory to store temporary files. The report will be generated as coverage .zip under this directory. Check that there is no existing directory with the same name.

A random directory under Agent's temp directory

jacocoReport

An example of a complete service message:

##teamcity[jacocoReport dataPath='jacoco.exec' includes='com.package.core.*' classpath='classes/lib/some.jar' reportDir='temp/jacocoReport']
Last modified: 07 September 2023