从渐变扩展访问配置闭包



我正在编写一个插件,它可以执行以下操作:

project.extensions.create('myExtension', new MyExtension(project))

其中MyExtension是定义我的新功能的类。

现在,在gradle.build中,我可以这样做:

myExtension {
    // configure cool stuff
}

我现在想做的是,在这个配置闭包中"消耗"一些东西,并使用project.configure(myTask, closure)将闭包的其余部分原样传递给我定义的任务。然而,我不知道如何

  1. MyExtension类访问配置闭包。

  2. "消耗"一些闭包,即访问闭包上的一些属性,然后剥离它们,留下另一个闭包,该闭包包含所有未触及的东西,但没有其他

任何指针都将不胜感激=)

这不是扩展的工作方式。为了配置扩展对象,会立即评估闭包。在那之后,结束就结束了。通常,插件会使用(包含在中的信息)扩展对象来进一步配置任务。

附言:是extensions.create('myExtension', MyExtension, project),不是project.extensions.create('myExtension', new MyExtension(project))

您可以做的一件事是在扩展上调用一个方法,并将"配置"作为闭包提供。所以不是

// build.gradle
myExtension {
    // configure cool stuff
}

你写

// build.gradle
myExtension.config {
    // configure cool stuff
}

扩展类中的according方法如下所示:

// MyExtension.groovy
class MyExtension {
    Project project
    MyExtension(Project project) {
        this.project = project
    }
    def config(Closure cl) {
        // Do stuff with the closure
    }
}

然而,当整个闭包被转发到您自己的代码时,您将失去Gradle通常对配置闭包所做的所有评估。