Wtyczka niestandardowa Gradle: dodaj zależność od obiektu rozszerzenia

Próbuję napisać wtyczkę, która dodaje zależnościproject.dependencies zgodnie z informacjami zebranymi w obiekcie rozszerzenia wtyczki. Ale wydaje się to niemożliwe.

Rzeczywiście, dane z obiektu rozszerzenia są dostępne tylko w nowym zadaniu lub wproject.afterEvaluate zamknięcie, ale zależności dodane w tych miejscach są ignorowane.

Poniższy kod próbuje dodać zależność wafterEvaluate ale zależność jest ignorowana:

apply plugin: MyPlugin

myplugin {
  version '1.0'
}

class MyPlugin implements Plugin<Project> {
  void apply(Project project) {
    project.extensions.create('myplugin', MyPluginExtension)

    project.afterEvaluate {
       def version = project.myplugin.version
       project.dependencies.add("compile", "org.foo:bar:$version") // --> ignored
    }
  }
}

class MyPluginExtension {
  def version
}

W poniższym kodzie wtrysk zależności działa, ale nie mam dostępu do obiektu rozszerzenia:

apply plugin: MyPlugin

myplugin {
  version '1.0'
}

class MyPlugin implements Plugin<Project> {
  void apply(Project project) {
    project.extensions.create('myplugin', MyPluginExtension)    

    def version = project.myplugin.version // == null
    project.dependencies.add("compile", "org.foo:bar:$version") // --> fail because $version is null

  }
}

class MyPluginExtension {
  def version
}

Czy istnieje rozwiązanie?

questionAnswers(4)

yourAnswerToTheQuestion