2017-08-28 16 views
0

Gradle用のプラグインを作成しています。拡張設定に基づいて動的なタスクを作成する必要があります。Gradleプラグインの読み取り設定

exampleext { 
    t1 { 
    } 
    t2 { 
    } 
} 

だから私はそうでsometaskの#t1とsometaskの#t2のようなタスクを作成したいと:build.gradleファイルから 例。 情報を見つけることができませんでした。どのようにこのクロージャ設定を読み、これらのタスクを構築するために使用できましたか?タスクでのみ読み込まれますが、タスクを実行する前に使用したいと思います。 ありがとうございます。

答えて

0

あなたはGroovyの動的な機能を使用することができます。

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" 
    } 
} 

あなたは、私は、動的タスクの作成に加えて、いくつかのより多くのネスティングが可能https://github.com/tschulte/gradle-jnlp-plugin/blob/374360c118e2a7373ee2fa5be7d1b784240bb1aa/gradle-jnlp-plugin/src/main/groovy/de/gliderpilot/gradle/jnlp/war/GradleJnlpWarPluginExtension.groovyを見て、持つことができます。例えば。

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

はしかし、多分あなたはインキュベートのGradleモデル(https://docs.gradle.org/current/userguide/software_model.html)を見ている必要があり

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) 
    } 
} 

によって可能になります。

関連する問題