如何创建按顺序执行多任务的Gradle自定义任务?解决属性缺失报错
解决Gradle任务顺序执行问题
你的代码报错是因为testDebugUnitTest这类任务属于项目级任务,并非dailyTask(GradleBuild类型)的属性,直接在其闭包里访问会触发属性找不到的异常,而且GradleBuild任务多用于跨项目执行任务,这里完全没必要用它。
下面提供两种可行的实现方式:
方式一:集中配置依赖与顺序
创建普通任务,通过tasks.named()安全获取任务实例,同时声明依赖和执行顺序:
task dailyTask { // 声明依赖所有目标任务 dependsOn tasks.named('lint'), tasks.named('ktfmtCheck'), tasks.named('testDebugUnitTest'), tasks.named('koverVerify') // 严格指定执行顺序 tasks.named('ktfmtCheck').configure { it.mustRunAfter('lint') } tasks.named('testDebugUnitTest').configure { it.mustRunAfter('ktfmtCheck') } tasks.named('koverVerify').configure { it.mustRunAfter('testDebugUnitTest') } }
tasks.named()会在任务创建完成后再配置,避免配置阶段的属性查找错误,mustRunAfter确保任务按指定顺序执行,配合dependsOn保证所有任务都会被触发。
方式二:构建任务依赖链
通过给每个任务添加前置依赖,形成链式关系,最后让dailyTask依赖链的最后一个任务:
// 构建依赖链,每个任务依赖前一个任务 tasks.named('ktfmtCheck').configure { it.dependsOn('lint') } tasks.named('testDebugUnitTest').configure { it.dependsOn('ktfmtCheck') } tasks.named('koverVerify').configure { it.dependsOn('testDebugUnitTest') } // dailyTask只需要依赖最后一个任务,自动触发整个链条 task dailyTask { dependsOn 'koverVerify' }
这种方式更直观,依赖关系明确,执行dailyTask时会按lint → ktfmtCheck → testDebugUnitTest → koverVerify的顺序依次执行。
内容的提问来源于stack exchange,提问作者Doublementi
相关产品推荐
相关产品推荐

