为什么有些gradle任务无法访问?
为什么有些gradle任务无法访问?,gradle,Gradle,gradlew tasks为我提供了这些任务(以及其他任务): 我可以添加额外的代码,例如,汇编,如下所示: assemble { doFirst { println "hello" } } 但无法与此列表中的许多其他对象一起执行此操作,例如,尝试添加到assembleDebug时会出现以下错误: Error:(65, 0) Could not find method assembleDebug() for arguments [build_6s1kvuwgpa
gradlew tasks
为我提供了这些任务(以及其他任务):
我可以添加额外的代码,例如,汇编
,如下所示:
assemble {
doFirst {
println "hello"
}
}
但无法与此列表中的许多其他对象一起执行此操作,例如,尝试添加到assembleDebug
时会出现以下错误:
Error:(65, 0) Could not find method assembleDebug() for arguments [build_6s1kvuwgpamstoh3d4xsg1ndv$_run_closure3@13494795] on project ':app' of type org.gradle.api.Project.
这是为什么?很容易解释。当您运行gradle脚本时,它将按照声明的顺序进行计算。但是——有时候,android project就是一个很好的例子——您不知道(也不知道)可以创建哪些任务,因为它们基于project的内容(文件、变体等等)。因此,在对整个项目进行评估之前,就会创建这些任务。这就是为什么您无法在
build.gradle
中访问它们,因为项目评估尚未完成
现在,如果您知道将创建名为assembleDebug
的任务,则可以使用[afterEvaluate
]在评估后配置任务。此时,将评估整个项目,并添加/生成所有任务
因此:
Error:(65, 0) Could not find method assembleDebug() for arguments [build_6s1kvuwgpamstoh3d4xsg1ndv$_run_closure3@13494795] on project ':app' of type org.gradle.api.Project.
project.afterEvaluate {
assembleDebug {
doFirst {
println "hello"
}
}
}