Clover Maven Plugin

The Clover plugin is the place where build actions related to Clover are found in Maven.

Clover is a tool that generates Test Coverage reports. It is free for non-commercial use. If your project is a commercial project you will need to get a license for the Clover jar before using this plugin. Please note that an evaluation license is included in this plugin.

Features

The Clover plugin currently supports the following features:

  • Instrumenting Java sources with Clover so that they generate coverage logs to a Clover database when they are exercised.
  • Aggregating Clover databases found in children modules into a single database so that reporting and checking for test coverage can be done at the level of the full project.
  • Generation of Clovered artifacts into your local repository, including Clovered EAR, WAR, RAR, etc containing a bundled Clover JAR. This allows including automated functional tests coverage into the Clover reports.
  • Generating a report from a Clover database.
  • Verifying that your source code has a defined test coverage percentage and fail the build if it's below that level. This is the equivalent of the Clover Check Ant task.
  • Dumping information about your Clover database.
  • NEW: Optimizing your tests by only running tests for code that has been modified

Note that the Clover plugin will not overwrite your main compiled classes nor your main test compiled tests classes. It creates a parallel directory in target/clover in order not to tamper with your main files.

Usage

Instructions on how to use Clover Maven Plugin can be found here.

Migration notice

Since version 4.2.0 this plugin is named org.openclover:clover-maven-plugin.

Since version 4.1.0 this plugin is named com.atlassian.maven.plugins:clover-maven-plugin - previously it was com.atlassian.maven.plugins:maven-clover2-plugin. Thus, goals are also named 'clover:xyz', e.g. clover:setup instead of old clover2:setup.

Goals Overview

The clover-maven-plugin has seven goals, but only six are called directly by the user. The full description of goals, generated automatically from the source code, is available here.

  • clover:aggregate - Aggregate children module Clover databases if there are any. This mojo should not exist. It's only there because the site plugin doesn't handle @aggregators properly at the moment...
  • clover:check - Verify Test Percentage Coverage (TPC) from an existing Clover database and fail the build if it is below the defined threshold. The check is done on main Clover databases and also on merged Clover databases when they exist.
  • clover:instrumentInternal - Instrument source roots.

    Note: Do not call this MOJO directly. It is meant to be called in a custom forked lifecycle by the other Clover plugin MOJOs.

  • clover:instrument - Instrument all sources using Clover and forks a custom lifecycle to execute project's tests on the instrumented code so that a Clover database is created.

    Note: We're forking a lifecycle because we don't want the Clover instrumentation to affect the main lifecycle build. This will prevent instrumented sources to be put in production by error. Thus running mvn install on a project where this instrument goal has been specified will run the build twice: once for building the project as usual and another time for instrumenting the sources with Clover and generating the Clover database.

  • clover:log - Provides information on the current Clover database.
  • clover:clover - Generate a Clover report from existing Clover databases. The generated report is an external report generated by Clover itself. If the project generating the report is a top level project and if the aggregate configuration element is set to true then an aggregated report will also be created.

    Note: This report mojo should be an @aggregator and the clover:aggregate mojo shouldn't exist. This is a limitation of the site plugin which doesn't support @aggregator reports...

  • clover:save-history - Save a Clover history point.

Examples

Check the plugin test suite (src/it directory) for example of how to use this plugin.