Gradle中如何在一个rule内调用另一个rule
Gradle Rule内部调用其他Rule的解决方法
你当前的写法问题在于直接使用dependsOn updatelight${path}的格式不符合Gradle任务依赖声明规范,模板字符串未加引号时会被识别为未定义变量,也无法匹配规则生成的目标任务。
以下是两种可用的实现方案:
方案1:直接传入拼接后的任务名字符串(最常用)
把拼接好的目标任务名作为字符串传给dependsOn即可,Gradle会自动匹配对应规则生成的任务,无需手动提前触发规则执行:
def path = taskName - 'updatefull' dependsOn "updatelight${path}"
注意不要漏掉任务名字符串的引号,不带引号的模板表达式会被Gradle判定为变量引用触发报错
方案2:显式获取任务实例(适用于需要额外配置目标任务的场景)
如果需要对依赖的updatelight开头的任务做参数调整等额外配置,可以先从tasks容器中获取任务实例再建立依赖:
def path = taskName - 'updatefull' def targetTask = tasks.named("updatelight${path}") dependsOn targetTask // 可追加自定义配置 targetTask.configure { // 此处填写目标任务的配置逻辑 }
注意事项
- 确保
updatelight前缀对应的规则,注册时机早于你当前updatefull前缀的规则,否则可能出现任务找不到的报错 - 如果使用Kotlin DSL,逻辑完全一致,仅需将字符串模板替换为Kotlin语法的
"updatelight$path"即可
内容的提问来源于stack exchange,提问作者AndreasInfo
相关产品推荐
相关产品推荐

