Gradle项目添加jacocoTestReport任务报错:同名任务已存在
解决Gradle中“Cannot add task ':jacocoTestReport' as a task with that name already exists”报错
这个报错我太熟了!本质原因是Android Gradle插件(AGP)已经帮你自动创建了jacocoTestReport任务——当你在项目中应用Jacoco插件后,AGP会默认生成这个任务来处理代码覆盖率报告,你手动再定义同名任务自然就冲突了。
下面给你两种靠谱的解决方案:
方案1:修改已存在的任务(推荐)
不用重新创建任务,直接修改AGP已经生成的jacocoTestReport,添加你的自定义配置即可:
针对Groovy DSL(build.gradle)
// 不要重新定义task jacocoTestReport,直接修改已有任务 jacocoTestReport { dependsOn "testDebugUnitTest" group = "Reporting" description = "Generate Jacoco coverage reports for Debug build" reports { xml.enabled = true // 可以按需开启html报告 // html.enabled = true } // 针对Debug变体配置源文件、类文件和执行数据 sourceSets sourceSets.debug classDirectories.setFrom(fileTree(dir: "${buildDir}/intermediates/classes/debug", exclude: [ '**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*' ])) executionData.setFrom(fileTree(dir: buildDir, includes: [ 'jacoco/testDebugUnitTest.exec', 'outputs/code_coverage/debugAndroidTest/connected/*coverage.ec' ])) }
针对Kotlin DSL(build.gradle.kts)
jacocoTestReport { dependsOn("testDebugUnitTest") group = "Reporting" description = "Generate Jacoco coverage reports for Debug build" reports { xml.required.set(true) // html.required.set(true) } sourceSets(sourceSets.debug.get()) classDirectories.setFrom(fileTree("${buildDir}/intermediates/classes/debug") { exclude( "**/R.class", "**/R$*.class", "**/BuildConfig.*", "**/Manifest*.*" ) }) executionData.setFrom(fileTree(buildDir) { include( "jacoco/testDebugUnitTest.exec", "outputs/code_coverage/debugAndroidTest/connected/*coverage.ec" ) }) }
方案2:自定义同名不同的任务(如果需要独立的报告任务)
如果你确实需要一个完全独立的覆盖率报告任务,只需要给任务换个名字,比如customJacocoDebugReport:
Groovy DSL示例
task customJacocoDebugReport(type: JacocoReport, dependsOn: "testDebugUnitTest") { group = "Reporting" description = "Generate custom Jacoco coverage reports for Debug build" reports { xml.enabled = true // 其他配置 } // 同样需要配置源文件、类文件等,参考方案1的配置即可 sourceSets sourceSets.debug // ... 其余必要配置 }
执行任务时,你只需要运行./gradlew customJacocoDebugReport就行,不会和默认任务冲突。
内容的提问来源于stack exchange,提问作者MickeyThreeSheds
相关产品推荐
相关产品推荐

