0

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' を取得できませんでした」が生成されます。

私の質問は、クロージャーに対して呼び出されたときに「greet」変数がどのように検出されるかですが、通常の変数として使用されたときに検出されないことです。舞台裏で起こっている Groovy/Gradle マジックとは?

4

1 に答える 1