我正在编写一个插件,它可以执行以下操作:
project.extensions.create('myExtension', new MyExtension(project))
其中MyExtension
是定义我的新功能的类。
现在,在gradle.build
中,我可以这样做:
myExtension {
// configure cool stuff
}
我现在想做的是,在这个配置闭包中"消耗"一些东西,并使用project.configure(myTask, closure)
将闭包的其余部分原样传递给我定义的任务。然而,我不知道如何
从
MyExtension
类访问配置闭包。"消耗"一些闭包,即访问闭包上的一些属性,然后剥离它们,留下另一个闭包,该闭包包含所有未触及的东西,但没有其他
任何指针都将不胜感激=)
这不是扩展的工作方式。为了配置扩展对象,会立即评估闭包。在那之后,结束就结束了。通常,插件会使用(包含在中的信息)扩展对象来进一步配置任务。
附言:是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通常对配置闭包所做的所有评估。