groovy构建脚本类可以直接访问Gradle项目吗?

时间:2016-05-06 16:24:53

标签: gradle groovy

groovy类(位于buildSrc/src/main/groovy)可以直接访问项目,还是必须明确传递项目?

我可以通过显式传递它作为方法参数来访问项目,但我不想将其传入。例如,我希望能够通过一个访问项目静态方法调用。这种隐式访问是否可行?

明确访问

import org.gradle.api.Project

class MyClazz {
    static void foo(Project project) {
        println project.version
    }
}

build.gradle中的任务

task foo() << {
    MyClazz.foo(project)
}

通过静态方法调用进行隐式访问(这是所需的访问模式)

import org.gradle.api.Project

class MyClazz {
    static void foo() {
        println Project.getProject().version
    }
}

build.gradle中的任务

task foo() << {
    MyClazz.foo()
}

1 个答案:

答案 0 :(得分:0)

您可以使用Groovy扩展方法执行此操作。

这是一个自包含的示例,但也应该与Gradle一起使用:

class Project {
    // we add this method dynamically
    //static getProject() { [ version: 2.3 ] }
}

class MyClazz {
    static void foo() {
        println Project.getProject().version
    }
}

class Gradle {

    static def main(args) {
        Project.metaClass.static.getProject = { [ version: 4.2 ] }
        MyClazz.foo()
    }

}