我们如何知道 Gradle 闭包中有哪些可用方法?例如:
task greeting {
dependsOn greeting0
doLast {
println("hi")
}
}
Run Code Online (Sandbox Code Playgroud)
在上面传递给任务的闭包中greeting,Gradle 特定的dependsOn&doLast来自哪里?
和dependsOn都是doLast方法Task。然而,如果我们看一下项目文档,就会发现闭包只是一个简单的 Groovy Closure。
作为示例,这里有一个 Groovy DSL 脚本,它显示了正在发生的情况(我希望如此)
class Example {
def missingMethod(String name, args) {
println name
}
static run(Closure cl) {
def project = new Project()
cl.delegate = project
cl.resolveStrategy = Closure.DELEGATE_FIRST
cl.call()
}
}
class Project {
def task(taskDefinition) {
def task = new Task()
taskDefinition[0].delegate = task
taskDefinition[0].resolveStrategy = Closure.DELEGATE_FIRST
taskDefinition[0].call()
}
def and(String what) {
println "Project $what"
}
def methodMissing(String name, args) {
args
}
}
class Task {
def say(String what) {
println "Task $what"
}
}
// So now we can "run" a script
Example.run {
task woo {
say "hello" // From task
and "world" // From project
}
}
Run Code Online (Sandbox Code Playgroud)
这打印
Task hello
Project world
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |