Gradle插件读取配置

Gradle插件读取配置,gradle,Gradle,我为Gradle编写了一个插件,需要根据扩展配置创建动态任务。 build.gradle文件中的示例: exampleext { t1 { } t2 { } } 所以我想创建一些任务,比如sometask#t1和sometask#t2等等。 我找不到任何信息,如何阅读此闭包配置并将其用于构建这些任务?它只在任务中读取,但我想在执行任务之前使用它。 提前感谢。您可以使用Groovy的动态功能: class ExamplePlugin implements Plug

我为Gradle编写了一个插件,需要根据扩展配置创建动态任务。 build.gradle文件中的示例:

exampleext {
    t1 {
    }
    t2 {
    }
}
所以我想创建一些任务,比如sometask#t1和sometask#t2等等。 我找不到任何信息,如何阅读此闭包配置并将其用于构建这些任务?它只在任务中读取,但我想在执行任务之前使用它。
提前感谢。

您可以使用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"
    }
}
是由

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)
    }
}
但是,也许您应该看看孵化gradle模型()

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