Gradle framework can automate the building, testing, publishing, deployment and more of software packages or other types of projects such as generated static websites or generated documentation.

Gradle Clover Plugin by Atlassian

An alpha version of plugin written by Atlassian developers, it offers basic functionality:

gradle-clover-plugin

Gradle Clover Plugin by Benjamin Muschko

A quite functional Clover plugin written by Benjamin Muschko:

https://github.com/bmuschko/gradle-clover-plugin

Known issues:

  • https://github.com/bmuschko/gradle-clover-plugin/issues
  • plug-in requires presence of "main" source directory (e.g. src/main/groovy)
  • a default test inclusion pattern is "**/*Test.java" and "**/*Test.groovy", so in case you have other test naming convention (for instance, Spock framework has "*Spec.groovy") you have to declare clover.testIncludes property in build.gradle

 

Integrating Clover manually

In case you would like to integrate Clover manually in your build.gradle script, then you need to handle at least three tasks:

  • code instrumentation - pass sources to CloverInstr (Java only), next pass instrumented sources to the 'compile' task
  • test execution - add clover.jar to the test classpath
  • report generation - call HtmlReporter or XMLReporter

Example:

build.gradle
apply plugin: 'java'

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    testCompile 'junit:junit:4.12'
}

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        classpath 'org.openclover:clover:4.4.0'
    }
}

sourceSets {
    clover {
        java {
            srcDir "$buildDir/sources-instr"
        }
    }
}

dependencies {
    cloverCompile 'org.openclover:clover:4.4.0'
}

configurations {
    cloverRuntime
    cloverRuntime.extendsFrom cloverCompile
}
 
task cloverInstr() {
    inputs.files sourceSets.main.allJava
    outputs.dir "$buildDir/sources-instr"

    doFirst {
        def argsList = ["--initstring", "${buildDir}/clover/clover.db",
                        "-d", "${buildDir}/sources-instr"]
        argsList.addAll(inputs.files.files.collect({ file ->
            file.absolutePath
        }))
        String[] args = argsList.toArray()

        com.atlassian.clover.CloverInstr.mainImpl(args)
    }
}

cloverClasses.dependsOn cloverInstr
 
test {
    def cloverClasspath = configurations.testRuntime + configurations.cloverRuntime + sourceSets.test.output + sourceSets.clover.output
    classpath = cloverClasspath
}

task cloverReport {
    inputs.dir "${buildDir}/clover"
    outputs.dir "${reportsDir}/clover"
    onlyIf {
        file("${buildDir}/clover/clover.db").exists()
    }
    doFirst {
        def argsList = ["--initstring", "${buildDir}/clover/clover.db",
                        "-o", "${reportsDir}/clover"]
        String[] args = argsList.toArray()
        com.atlassian.clover.reporters.html.HtmlReporter.runReport(args)
    }
}

 

References

CLOV-1009 - Clover integration with Gradle Open  - feature request for Clover

BAM-9368 - Support Gradle builder Resolved  - Gradle plugin for Bamboo - a Gradle Task is available in the free bamboo-artifactory-plugin.