diff --git a/build.gradle b/build.gradle index b839f789..abcee58c 100644 --- a/build.gradle +++ b/build.gradle @@ -12,9 +12,7 @@ buildscript { classpath gradlePlugins.kotlin classpath gradlePlugins.ktlintGradle classpath gradlePlugins.detekt - classpath(gradlePlugins.jacocoAndroid) { - exclude group: 'org.codehaus.groovy', module: 'groovy-all' - } + classpath gradlePlugins.jacoco } } diff --git a/dependencies.gradle b/dependencies.gradle index 90f7fb05..ffbb8e74 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,6 @@ ext.versions = [ ktlintGradle : "4.1.0", detekt : "1.0.0.RC6-4", jacoco : "0.8.1", - jacocoAndroid : "0.1.3", androidSupport : "22.2.1", @@ -37,7 +36,7 @@ ext.gradlePlugins = [ kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin", ktlintGradle : "gradle.plugin.org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle", detekt : "gradle.plugin.io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$versions.detekt", - jacocoAndroid : "com.dicedmelon.gradle:jacoco-android:$versions.jacocoAndroid" + jacoco : "org.jacoco:org.jacoco.core:$versions.jacoco" ] ext.androidSupport = [ diff --git a/gradle_scripts/jacoco.gradle b/gradle_scripts/jacoco.gradle index c8209068..eef97b49 100644 --- a/gradle_scripts/jacoco.gradle +++ b/gradle_scripts/jacoco.gradle @@ -1,17 +1,21 @@ apply plugin: 'jacoco' +jacoco { + toolVersion(versions.jacoco) +} + task jacocoMergeReports(type: JacocoMerge) { group = "Reporting" description = "Merge all jacoco reports from projects into one." - def subsonicApi = project.findProject("subsonic-api") - def ultrasonicApp = project.findProject("ultrasonic") - def cache = project.findProject("cache") - executionData( - "${subsonicApi.buildDir}/jacoco/test.exec", - "${ultrasonicApp.buildDir}/jacoco/testDebugUnitTest.exec", - "${cache.buildDir}/jacoco/test.exec" - ) + List jacocoFiles = new ArrayList<>() + project.subprojects { subproject -> + File commonModuleReport = new File(subproject.buildDir, "/jacoco/test.exec") + if (commonModuleReport.exists()) jacocoFiles.add(commonModuleReport) + File androidModuleReport = new File(subproject.buildDir, "/jacoco/testDebugUnitTest.exec") + if (androidModuleReport.exists()) jacocoFiles.add(androidModuleReport) + } + executionData(jacocoFiles.toArray()) destinationFile(file("${project.buildDir}/jacoco/jacoco.exec")) } @@ -20,35 +24,33 @@ def createJacocoFullReportTask() { group = "Reporting" description = "Generate full Jacoco coverage report including all modules." - def subsonicApi = project.findProject("subsonic-api") - def subsonicApiImageLoader = project.findProject("subsonic-api-image-loader") - def ultrasonicApp = project.findProject("ultrasonic") - def cache = project.findProject("cache") - - classDirectories = files( - fileTree( - dir: "${subsonicApi.buildDir}/classes/main", - excludes: subsonicApi.jacocoExclude - ), - fileTree( - dir: "${subsonicApiImageLoader.buildDir}/intermediates/classes/debug/org", - excludes: subsonicApiImageLoader.jacocoExclude - ), - fileTree( - dir: "${ultrasonicApp.buildDir}/intermediates/classes/debug/org", - excludes: ultrasonicApp.jacocoExclude - ), - fileTree( - dir: "${cache.buildDir}/classes/kotlin/main", - excludes: cache.jacocoExclude + List classFileTreeList = new ArrayList<>() + List sourceFileTreeList = new ArrayList<>() + project.subprojects { subproject -> + if (subproject.plugins.hasPlugin("kotlin-android") && + subproject.hasProperty("jacocoExclude")) { + classFileTreeList.add( + fileTree( + dir: "${subproject.buildDir}/tmp/kotlin-classes/debug", + excludes: subproject.jacocoExclude + ) ) - ) - sourceDirectories = files( - subsonicApi.sourceSets.main.getAllSource(), - subsonicApiImageLoader.extensions.getByName('android').sourceSets.main.java.sourceFiles, - ultrasonicApp.extensions.getByName('android').sourceSets.main.java.sourceFiles, - cache.sourceSets.main.getAllSource(), - ) + sourceFileTreeList.add( + subproject.extensions.getByName('android').sourceSets.main.java.sourceFiles + ) + } else if (subproject.hasProperty("jacocoExclude")) { + classFileTreeList.add( + fileTree( + dir: "${subproject.buildDir}/classes/kotlin/main", + excludes: subproject.jacocoExclude + ) + ) + sourceFileTreeList.add(subproject.sourceSets.main.getAllSource()) + } + } + + classDirectories = files(classFileTreeList.toArray()) + sourceDirectories = files(sourceFileTreeList.toArray()) executionData = files("${buildDir}/jacoco/jacoco.exec") reports { diff --git a/subsonic-api-image-loader/build.gradle b/subsonic-api-image-loader/build.gradle index 7f7d3a71..5baa60ce 100644 --- a/subsonic-api-image-loader/build.gradle +++ b/subsonic-api-image-loader/build.gradle @@ -1,7 +1,20 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'jacoco-android' apply from: '../gradle_scripts/code_quality.gradle' +apply plugin: 'jacoco' + + +ext { + jacocoExclude = [] +} + +jacoco { + toolVersion(versions.jacoco) +} + +tasks.withType(Test) { + jacoco.includeNoLocationClasses = true +} android { compileSdkVersion(versions.compileSdk) @@ -37,19 +50,3 @@ dependencies { testImplementation testing.kluent testImplementation testing.robolectric } - -jacoco { - toolVersion(versions.jacoco) -} - -ext { - jacocoExclude = [] -} - -jacocoAndroidUnitTestReport { - excludes += jacocoExclude -} - -afterEvaluate { - testDebugUnitTest.finalizedBy jacocoTestDebugUnitTestReport -} \ No newline at end of file diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle index e26e6631..aa7a2ff5 100644 --- a/ultrasonic/build.gradle +++ b/ultrasonic/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'jacoco-android' +apply plugin: 'jacoco' apply from: "../gradle_scripts/code_quality.gradle" android { @@ -90,10 +90,11 @@ ext { '**/di/**' ] } -jacocoAndroidUnitTestReport { - excludes += jacocoExclude + +jacoco { + toolVersion(versions.jacoco) } -afterEvaluate { - testDebugUnitTest.finalizedBy jacocoTestDebugUnitTestReport +tasks.withType(Test) { + jacoco.includeNoLocationClasses = true }