9

I am trying to add JaCoCo to my Android for Sonar Qube coverage. But upon running the commands ./gradlew jacocoTestReport I get the following error.

 Task :app:testAlphaReleaseUnitTest FAILED


 FAILURE: Build failed with an exception.

What went wrong:

Could not resolve all files for configuration ':app:jacocoAgent'.
> Could not find org.jacoco:org.jacoco.agent:org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.
  Searched in the following locations:
    - file:/Users/atif/Library/Android/sdk/extras/m2repository/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - file:/Users/atif/Library/Android/sdk/extras/m2repository/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - file:/Users/atif/Library/Android/sdk/extras/google/m2repository/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - file:/Users/atif/Library/Android/sdk/extras/google/m2repository/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - file:/Users/atif/Library/Android/sdk/extras/android/m2repository/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - file:/Users/atif/Library/Android/sdk/extras/android/m2repository/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://jcenter.bintray.com/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://jcenter.bintray.com/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://dl.google.com/dl/android/maven2/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://dl.google.com/dl/android/maven2/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://maven.fabric.io/public/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://maven.fabric.io/public/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://jcenter.bintray.com/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://jcenter.bintray.com/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://maven.fabric.io/public/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://maven.fabric.io/public/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://dl.google.com/dl/android/maven2/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://dl.google.com/dl/android/maven2/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
    - https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.pom
    - https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.agent/org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated/org.jacoco.agent-org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated.421021a4
  Required by:
      project :app

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Here are my gradle files:

project build.gradle

buildscript{
    dependencies {
        classpath "org.jacoco:org.jacoco.core:0.8.2"
        classpath "org.jacoco:org.jacoco.agent:0.8.2"
    }
}

plugins {
    id "jacoco"
}

App build.gradle:

plugins {
    id "com.android.application"
    id "jacoco-android"
    id "org.sonarqube" version "2.6"
}

android {
    buildTypes {
        debug {
            testCoverageEnabled = true
        }
    }
}

android.testOptions {
    unitTests.all {
        jacoco {
            includeNoLocationClasses = true
        }
    }
}

jacoco {
    toolVersion = "0.8.2"
    reportsDir = file("$buildDir/reports/jacoco/")
}

jacocoAndroidUnitTestReport {
    csv.enabled false
    html.enabled false
    xml.enabled true
}
Jon Goodwin
  • 9,053
  • 5
  • 35
  • 54
Mohammed Atif
  • 4,383
  • 7
  • 28
  • 57

3 Answers3

5

the one is a Gradle plugin, which belongs into the root project's buildscript dependencies:

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath "com.dicedmelon.gradle:jacoco-android:0.1.4"
        classpath "com.android.tools.build:gradle:3.2.1"
        classpath "org.jacoco:org.jacoco.core:0.8.3"
        ...
    }
}

and the other one is a library, which belongs into the module's Java dependencies:

apply plugin: "com.android.application"
// apply plugin "jacoco"
apply plugin: "jacoco-android"

...

dependencies {
    ...
    testImplementation "org.jacoco:org.jacoco.agent:0.8.3"
}

the jacoco-android GitHub says nothing about apply plugin "jacoco", but it might be required.

Martin Zeitler
  • 1
  • 19
  • 155
  • 216
  • 1
    I tried this approach but I still get the same error. – Mohammed Atif Mar 03 '19 at 08:33
  • @MohammedAtif this sounds unlikely, because `testImplementation "org.jacoco:org.jacoco.agent:0.8.3"` provides the missing dependency. this is not a Gradle plugin, but will be added into the package. you might have to sync the project, in order to fetch the library. and if you use `jacoco-android` plugin, you have to add it to the `buildscript` dependencies: `classpath 'com.dicedmelon.gradle:jacoco-android:0.1.4'` (this is a Gradle plugin). – Martin Zeitler Mar 03 '19 at 15:05
  • just noticed, that the `buildscript` you've posted has no repositories added ...those Gradle plugin repositories need to be configured independently from the Java library repositories. – Martin Zeitler Mar 03 '19 at 15:12
  • Thanks for the answer, but apparently it was issue with the jacoco version mismatch with jacoco-android plugin. Downgrading jacoco to 0.7.9 worked with jacoco-android – Mohammed Atif Mar 05 '19 at 07:46
  • @MohammedAtif there might be some other version mismatch, because the example configuration on GitHub for version `0.1.4` also uses the current version `0.8.3` (and so they should match each other). clearing all caches might help, because it shouldn't be alike this. with later versions of build tools or Gradle (not sure which of them), only the path with the test-classes had changed. – Martin Zeitler Mar 09 '19 at 20:28
0

Mohammed here is the code I am using with the regular gradle jacoco plugin

its even setup to gather both espresso and spoon stuff by default

jacoco {
    toolVersion = "0.8.2"
    // Custom reports directory can be specfied like this:
    reportsDir = file("$buildDir/outputs/reports/jacoco")
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}


task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
    xml.enabled = true
    html.enabled = true
}

def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"

getSourceDirectories().setFrom(files([mainSrc]))
//sourceDirectories = files([mainSrc])
//classDirectories = files([debugTree])
getClassDirectories().setFrom(files([debugTree]))
getExecutionData().setFrom(fileTree(dir: "$buildDir", includes: [
        "jacoco/testDebugUnitTest.exec",
        "**/io.gitlab.fredgrott.droidkotlinkit.*/coverageExecutionData/spoonCoverage.ec",
        "outputs/code-coverage/connected/*coverage.ec"
]))

}
NightFury
  • 13,436
  • 6
  • 71
  • 120
Fred Grott
  • 3,505
  • 1
  • 23
  • 18
0

You are not defining a repository in your build. For many people that would be Maven Central.

repositories {
    mavenCentral()
}

It seems as if you want to manage your libraries yourself as you are pointing to the lib folder. I assume these libraries are checked in with your source code? If the same strategy should apply to the JaCoCo libraries then you will need to put them there and assign them to the configurations of the JaCoCo plugin.

Sejpal Pavan
  • 130
  • 10