在gradle中的插件扩展中传递闭包

在gradle中的插件扩展中传递闭包,gradle,groovy,Gradle,Groovy,我想传递一个闭包作为插件的配置。以下是它的一个最低版本: package org.samuel.gradle.plugins import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.Task class TestPlugin implements Plugin<Project> { void apply(Project project) { project.ex

我想传递一个闭包作为插件的配置。以下是它的一个最低版本:

package org.samuel.gradle.plugins

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task

class TestPlugin implements Plugin<Project> {
  void apply(Project project) {

    project.extensions.create("testConfig", TestConfig)

    Task test = project.task("testTask") {
      doFirst {
        println "The message is already " + project.extensions.testConfig.message
        println "Trying to run closure " + project.extensions.testConfig.closure
        project.extensions.testConfig.closure()
        println "did it run?"
      }
    }
  }
}

class TestConfig {
  String message = "Testing ..."
  Closure closure = {
    println("running closure")
  }
}

我想我遗漏了一些关于gradle如何评估扩展内容的信息。是否有可能通过扩展传递某些内容,并在插件中的任务中对其进行评估?

该解决方案令人惊讶地没有什么效果。将用于调用闭包的行更改为:

project.extensions.testConfig.closure.call()
注意使用
.call()
与只调用
()

还注意到,这称为闭包:

println "Trying to run closure ${project.extensions.testConfig.closure}"

谢谢您的回答!我将暂时接受它,因为我假设它确实是这样工作的,但对于不太可能的旁观者:我无法真正验证这一点,因为我已经有一段时间没有与gradle合作了,而且与此问题相关的代码库属于一位前雇主
println "Trying to run closure ${project.extensions.testConfig.closure}"