groovy构建脚本类能否直接访问Gradle项目?

groovy构建脚本类能否直接访问Gradle项目?,gradle,groovy,Gradle,Groovy,groovy类(位于buildSrc/src/main/groovy中)可以直接访问项目吗,还是必须显式地传入项目 我可以通过显式地将项目作为方法参数传入来访问该项目,但我不希望必须传入它。例如,我希望能够通过静态方法调用访问项目。这种类型的隐式访问可能吗 显式访问 import org.gradle.api.Project class MyClazz { static void foo(Project project) { println project.versio

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)
}
task foo() << {
    MyClazz.foo()
}
build.gradle中的任务

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

task foo()您可以使用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()
    }

}

你如何调用脚本?@AdamSkywalker我更新了问题,将任务包含在build中。gradleI认为你并不比我更了解它-在任务执行期间调用方法没有特定的上下文。gradle API没有Project.getProject()类似项,因此您必须在某些服务设置任务中以参数形式传递Project,或者在执行实际任务之前执行相同的操作。您可以编写插件,然后直接访问Project