Maven plugin for scoverage
Clone or download

README.md

scoverage-maven-plugin

scoverage-maven-plugin is a plugin for Maven that integrates the scoverage code coverage library. Find out more about scoverage.

Join the chat at https://gitter.im/scoverage/scoverage-maven-plugin

Build Status Build Status License Maven Central

How to use

mostly used mojos:

  • check goal compiles classes with instrumentation, runs unit tests and checks coverage,

  • report goal compiles classes with instrumentation, runs unit tests and generates reports,

  • integration-check goal compiles classes with instrumentation, runs unit and integration tests and checks coverage,

  • integration-report goal compiles classes with instrumentation, runs unit and integration tests and generates reports,

additional, sometimes useful, mojos:

  • test goal compiles classes with instrumentation and runs unit tests,

  • integration-test goal compiles classes with instrumentation and runs unit and integration tests,

  • check-only goal only checks coverage using coverage data generated earlier in the build (by test, report, integration-test or integration-report goal).

  • report-only goal generates reports using coverage data generated earlier in the build (by test, check, integration-test or integration-check goal),

  • package goal generates artifact file containing instrumented classes (e.g. for testing outside of the Maven build),

internal mojos:

  • pre-compile and post-compile are internal goals, they configure Maven build in forked scoverage life cycle; don't use them.

Maven generated plugin documentation:

Version Documentation
1.3.0 Plugin Info
Prerequisities / limitations

Plugin is compatible with two Maven Scala compiler plugins:

Scoverage Maven plugin version

This can be set as project property.

<project>
    <properties>
        <scoverage.plugin.version>1.3.0</scoverage.plugin.version>
    </properties>
</project>
Scala version configuration

Plugin supports Scala 2.10.x and 2.11.x versions by automatically loading and configuring scalac-scoverage-plugin_2.10 or scalac-scoverage-plugin_2.11 Scalac SCoverage Plugin artifact. For this to work Scala version has to be set. It can be done by defining scalaVersion plugin configuration parameter or scala.version project property. Without this setting, coverage will not be calculated.

<project>
    <properties>
        <scala.version>2.11.8</scala.version>
    </properties>
</project>

or

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <scalaVersion>2.11.8</scalaVersion>
                    <!-- other parameters -->
                </configuration>
             </plugin>
        </plugins>
    </build>
</project>

The first method is better because once the property is defined it's value can be used in other places of the build file. For example in scala-library dependency version every Scala build should declare.

<project>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>
    </dependencies>
</project>
Scalac SCoverage plugin version configuration

Maven SCoverage plugin uses by default the latest version of the scalac-scoverage-plugin available on its release day. If newer, better version of scalac-scoverage-plugin is available, it can be used instead. It can be configured by defining scalacPluginVersion plugin configuration parameter or scoverage.scalacPluginVersion project property.

<project>
    <properties>
        <scoverage.scalacPluginVersion>1.3.0</scoverage.scalacPluginVersion>
    </properties>
</project>

or

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <scalacPluginVersion>1.3.0</scalacPluginVersion>
                    <!-- other parameters -->
                </configuration>
             </plugin>
        </plugins>
    </build>
</project>
Integration tests coverage check and reports

integration-check and integration-report mojos are similar to check and report mojos, but they execute forked scoverage life cycle up to verify phase (integration tests are usually executed in integration-test phase).

Aggregated reports for multi-module projects

There is no separate mojo for aggregated reports, there is aggregate parameter. To additionally genenerate aggregated SCoverage report for root module, when generating regular reports, set aggregate parameter value to true. It works only in multimodule projects.

It can be configured by defining aggregate plugin configuration parameter or scoverage.aggregate project property.

<project>
    <properties>
        <scoverage.aggregate>true</scoverage.aggregate>
    </properties>
</project>

in build/plugins or build/pluginManagement section when running reports directly from console (e.g. mvn scoverage:report)

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
             </plugin>
        </plugins>
    </build>
</project>

or in reporting/plugins section when adding report to Maven generated site

<project>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
             </plugin>
        </plugins>
    </reporting>
</project>
Adding SCoverage report to site

Add plugin to reporting section of your project and configure it to generate one of reporting mojos. By default Maven executes all plugin's reporting mojos, but in case of SCoverage plugin this does not make sense, every executed report will overwrite the previous one.

<project>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report</report>
                            <!-- or <report>integration-report</report> -->
                            <!-- or <report>report-only</report> -->
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
</project>

Which reporting mojo should be selected:

Reporting mojo When
report When not using integration tests (most cases)
integration-report When using integration tests
report-only When coverage data was already generated (usually by check or integration-check mojo)
Customizing code instrumentation

If you want to customize plugin's configuration parameters used by compilation supporting part of the plugin, do it in 'plugins' or 'pluginManagement' section:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <highlighting>true</highlighting>
                    <!-- example configuration for Play! Framework 2.x project -->
                    <excludedPackages>views.html.*</excludedPackages> 
                    <excludedFiles>.*?routes_(routing|reverseRouting)</excludedFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Read SBT SCoverage Plugin documentation for more information about highlighting and excludedPackages.

Checking minimum test coverage level
<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <minimumCoverage>80</minimumCoverage>
                    <failOnMinimumCoverage>true</failOnMinimumCoverage>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal> <!-- or integration-check -->
                        </goals>
                        <phase>prepare-package</phase> <!-- or any other phase -->
                    </execution>
                </executions>
             </plugin>
        </plugins>
    </build>
</project>

Read SBT SCoverage Plugin documentation for more information.

Checking minimum test coverage level AND adding report to site
<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <configuration>
                    <minimumCoverage>80</minimumCoverage>
                    <failOnMinimumCoverage>true</failOnMinimumCoverage>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal> <!-- or integration-check -->
                        </goals>
                        <phase>prepare-package</phase> <!-- or any other phase -->
                    </execution>
                </executions>
             </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.scoverage</groupId>
                <artifactId>scoverage-maven-plugin</artifactId>
                <version>${scoverage.plugin.version}</version>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report-only</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
</project>

There are many example projects. Go to one of them and run mvn site.

License

This software is licensed under the Apache 2 license, quoted below.

Copyright 2014-2018 Grzegorz Slowikowski

Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.