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

如何通过编程方式获取Gradle的目标任务?

仅在运行jacocoTestReport时应用Jacoco插件的实现方案

你之前的代码问题在于初始化阶段无法获取最终的任务图,gradle.targets并不是正确的API,此时Gradle还没完成任务依赖解析。要实现按需应用插件,需要借助Gradle的任务图就绪回调来判断目标任务:

gradle.taskGraph.whenReady { taskGraph ->
    // 判断任务图中是否包含jacocoTestReport任务(根项目用:jacocoTestReport,子项目替换为对应路径)
    if (taskGraph.hasTask(":jacocoTestReport")) {
        apply<JacocoPlugin>()

        // 配置jacocoTestReport任务
        tasks.named<JacocoReport>("jacocoTestReport") {
            dependsOn("test")
            reports {
                xml.required.set(true)
            }
        }

        // 必须启用test任务的Jacoco代理,否则无法生成覆盖数据
        tasks.named<Test>("test") {
            jacoco {
                enabled = true
            }
        }
    }
}

关键说明:

  • 任务图就绪回调:gradle.taskGraph.whenReady会在Gradle完成任务依赖解析、确定最终要执行的任务列表后触发,此时能准确判断目标任务是否存在。
  • 任务路径匹配:hasTask方法需要传入完整的任务路径,单模块项目用:jacocoTestReport,多模块项目要写成:子项目名称:jacocoTestReport;如果想忽略路径直接匹配任务名,可以用taskGraph.allTasks.any { it.name == "jacocoTestReport" }。
  • Test任务配置:启用Jacoco插件后,必须显式打开test任务的jacoco开关,否则测试不会生成覆盖数据,最终报告为空。

这样执行gradle test时,任务图中没有jacocoTestReport,插件不会被应用,测试也不会加载Jacoco代理,速度不受影响;执行gradle jacocoTestReport时,才会触发插件应用和Jacoco配置,生成测试覆盖报告。

内容的提问来源于stack exchange,提问作者caeus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:37:27