2017-08-28 4 views
0

Ich schreibe ein Plugin für Gradle und ich muss dynamische Aufgaben basierend auf meiner Erweiterung Konfiguration erstellen. Beispiel aus build.gradle Datei:Gradle Plugin lesen Konfiguration

exampleext { 
    t1 { 
    } 
    t2 { 
    } 
} 

Deshalb möchte ich Aufgaben wie sometask # t1 und sometask # T2 erstellen und so weiter. Ich konnte keine Informationen finden, wie kann ich diese Closure-Konfiguration lesen und sie zum Erstellen dieser Aufgaben verwenden? Es ist nur einlesen Aufgaben, aber ich möchte es vor dem Ausführen von Aufgaben verwenden. Vielen Dank im Voraus.

Antwort

0

könnten Sie Groovy dynamischen Eigenschaften:

class ExamplePlugin implements Plugin<Project> { 

    void apply(Project project) { 
     project.extensions.create("exampleext", ExampleExt, project) 
    } 
} 

class ExampleExt { 
    Project project 
    ExampleExt(Project project) { 
     this.project = project 
    } 

    def methodMissing(String name, Object args) { 
     def configClosure = args ? args[0] : {} 
     project.tasks.create(name: "sometask#$name", type: Copy, configClosure) 
    } 
} 


apply plugin: ExamplePlugin 

exampleext { 
    t1 { 
     from "src/main/java" 
     into "$buildDir/tmp/main" 
    } 
    t2 { 
     from "src/test/java" 
     into "$buildDir/tmp/test" 
    } 
} 

Sie einen Blick auf https://github.com/tschulte/gradle-jnlp-plugin/blob/374360c118e2a7373ee2fa5be7d1b784240bb1aa/gradle-jnlp-plugin/src/main/groovy/de/gliderpilot/gradle/jnlp/war/GradleJnlpWarPluginExtension.groovy haben kann, wo ich dynamische Aufgabenerstellung sowie einige weitere Verschachtelung ermöglichen. Z.B.

jnlpWar { 
    versions { 
     "1.0"('org.example:application:1.0:[email protected]') 
    } 
} 

möglich gemacht wird durch

void versions(Closure closure) { 
    closure.delegate = new Versions() 
    closure() 
} 

private class Versions { 
    @Override 
    Object invokeMethod(String name, Object args) { 
     project.configurations.maybeCreate(name) 
     return project.dependencies.invokeMethod(name, args) 
    } 
} 

Allerdings sollten Sie vielleicht einen Blick auf die Inkubation gradle Modell (https://docs.gradle.org/current/userguide/software_model.html).

Verwandte Themen