3

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

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

MyExtension定义我的新功能的类在哪里。

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

myExtension {
    // configure cool stuff
}

我现在想做的是“使用”这个 configure 闭包中的一些东西,并将闭包的其余部分按原样传递给我定义的任务,使用project.configure(myTask, closure). 但是,我不知道如何

  1. 从类访问配置闭包MyExtension

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

任何指针将不胜感激=)

4

2 回答 2

1

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

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

于 2013-06-29T07:28:49.223 回答
0

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

// build.gradle

myExtension {
    // configure cool stuff
}

你写

// build.gradle

myExtension.config {
    // configure cool stuff
}

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

// MyExtension.groovy

class MyExtension {
    Project project

    MyExtension(Project project) {
        this.project = project
    }

    def config(Closure cl) {
        // Do stuff with the closure
    }
}

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

于 2017-02-07T12:29:18.953 回答