Search code examples
gradlecobertura

cobertura + gradle - why can't I run the cobertura task?


I'm working on a multiple projects gradle project and the main build.gradle is like this:

buildscript {
repositories {
    mavenLocal()
    mavenCentral()
}
    dependencies {
        classpath 'net.saliman:gradle-cobertura-plugin:2.2.4'
    }
}

plugins {
    id "org.sonarqube" version "2.2.1"
}

apply plugin: 'groovy'
apply plugin: 'cobertura'

def getVersionName = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'describe', '--tags', '--always'
        standardOutput = stdout
    }
    return stdout.toString().trim()
}

ext {
    springFrameworkVersion = '4.3.4.RELEASE'
}

subprojects {
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'java'
    apply from: "${parent.projectDir.canonicalPath}/cobertura.gradle"

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
        mavenCentral()
    }

    dependencies {
        compile("org.springframework:spring-context:${springFrameworkVersion}")

        testCompile("junit:junit:4.+")
        testCompile("org.springframework:spring-test:${springFrameworkVersion}")
    }
    jar {
        version = getVersionName()
    }
}

project(':projectA') {

}

project(':projectB') {
   dependencies {
            compile project(':projectA')
        }
    }

project(':projectC') {
    dependencies {
        compile project(':projectB')
    }
}

cobertura {
    coverageFormats = ['html', 'xml']
    coverageIgnoreTrivial = true
    coverageIgnores = ['org.slf4j.Logger.*']
    coverageReportDir = new File("$buildDir/reports/cobertura")
}

But when I try to run the gradle wrapper with the cobertura task, it fails and console output is:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':instrument'.
> Could not resolve all dependencies for configuration ':cobertura'.
   > Cannot resolve external dependency net.sourceforge.cobertura:cobertura:2.0.3 because no repositories are defined.
     Required by:
         :main-project:unspecified

What is going on here?


Solution

  • Just like the error message tells you.

    You have declared a dependency on net.sourceforge.cobertura:cobertura:2.0.3 in your root project (as it is not added explicitly, I'd guess the Gradle cobertura plugin adds it implicitly, its documentation should probably tell so) but you do not have any repository defined for your root project. You only declared repositories for the buildscript (to resolve Gradle plugins and stuff) and for all sub-projects in the subprojects closure. Define the repository also for the root project, either separately, or by using allprojects closure and your build should work fine, at least in this regard.