Gradle plugin personalizado: agregar dependencia desde objeto de extensión

Estoy tratando de escribir un complemento que añade dependencias aproject.dependencies De acuerdo a las informaciones recogidas en el complemento de extensión del objeto. Pero parece ser imposible.

De hecho, los datos del objeto de extensión solo están disponibles en una nueva tarea o enproject.afterEvaluate Cierre, pero las dependencias agregadas en esos lugares son ignoradas.

El siguiente código intenta agregar la dependencia enafterEvaluate pero la dependencia se ignora:

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
}

En el siguiente código, la inyección de dependencia funciona, pero no tengo acceso al objeto de extensión:

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
}

¿Hay alguna solución?

Respuestas a la pregunta(4)

Su respuesta a la pregunta