Gradle闭合的可用方法

e0bqpujr  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(111)

我们如何知道Gradle闭包中有哪些可用方法?例如:

task greeting {
    dependsOn greeting0

    doLast {
        println("hi")
    }
}

在上述传递给任务greeting的闭包中,Gradle特定的dependsOndoLast来自哪里?
dependsOndoLast都是Task方法,但是,如果我们看一下Project文档,闭包只是一个简单的Groovy Closure

ktca8awb

ktca8awb1#

作为一个例子,这里有一个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
    }
}

此打印

Task hello
Project world

相关问题