我的 build.gradle 中有以下代码:
class GreetingPlugin implements Plugin<Project> {
def void apply(Project project) {
project.convention.plugins.greeting = new GreetingPluginConvention()
project.task('hello') {
doLast {
println project.convention.plugins.greeting.message
}
}
}
}
class GreetingPluginConvention {
String message
def greet(Closure closure) {
closure.delegate = this
closure()
}
}
apply plugin: GreetingPlugin
greet {
message = 'Hi from Gradle'
}
它执行得很好 -./gradlew hello
打印出预期的“Hi from Gradle”。
greet
但是,在脚本中使用变量(例如println greet
)会产生“无法为 org.gradle.api.Project 类型的项目 ':app' 获取未知属性 'greet'”。
我的问题是 - 在针对闭包调用时如何找到“问候”变量,但在用作常规变量时找不到。幕后发生了什么 Groovy/Gradle 魔法?