从gradle扩展访问配置闭包

时间:2013-06-28 08:35:37

标签: plugins gradle

我正在编写一个插件,其中包含以下内容:

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

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

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

myExtension {
    // configure cool stuff
}

我现在要做的是在这个配置闭包中“消耗”一些东西,并使用project.configure(myTask, closure)将剩下的闭包原样传递给我定义的任务。但是,我不知道如何

  1. MyExtension类访问配置闭包。

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

  3. 任何指针都会非常感激=)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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通常对配置闭包所做的所有评估。