在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}"