Android JacocoReport注册任务未执行的原因及解决方法咨询
问题原因与解决办法
原因
当你通过<JacocoReport>泛型注册任务时,Gradle会将该任务识别为JacocoReport类型的任务,这类任务有几个必须配置的核心属性(比如executionData、sourceSets、classDirectories)。如果这些属性未配置,Gradle会判定该任务没有执行的必要(任务状态为UP-TO-DATE或SKIPPED),因此不会触发doFirst和doLast代码块。
而移除泛型声明后,默认创建的是DefaultTask类型,这类任务没有强制的配置要求,只要触发任务就会执行所有代码块,所以能正常打印"First"和"Last"。
解决办法
给JacocoReport任务配置必要的核心属性,让Gradle认为任务需要执行。示例代码如下:
tasks.register<JacocoReport>("randomTaskName") { println("Registering task") // 配置JacocoReport核心属性 // 指定Jacoco的执行数据文件(.exec)路径 executionData(fileTree(project.buildDir).include("jacoco/*.exec")) // 指定要统计覆盖率的源码集 sourceSets(project.sourceSets.main) // 指定编译后的类文件目录 classDirectories.setFrom(project.sourceSets.main.output.classesDirs) doFirst { println("First") } doLast { println("Last") } }
如果只是临时测试任务的执行逻辑,不想配置完整的Jacoco属性,可以添加一行强制任务每次都执行的配置:
// 仅用于测试,正式场景不推荐 outputs.upToDateWhen { false }
内容的提问来源于stack exchange,提问作者SMGhost
相关产品推荐
相关产品推荐

