You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:26:00