如何从`buildSrc`访问Gradle `project`?

3

我在buildSrc里面有以下内容:

class MyClass {
    def doSomething() {
        final familyMembers = project.configurations['compile'].allDependencies.collect { dep ->
            dep.name
        }
    }

但是当我在build.gradle中尝试使用它时:

task 'do-something' << {
    final myObject = new MyClass()
    myObject.doSomething()
}

以下错误消息被触发:
* What went wrong:
Execution failed for task ':my-project:do-something'.
> No such property: project for class: MyClass

如何使projectMyClass中可见?

1个回答

4
你需要将项目作为参数传递给MyClass。例如,声明一个构造函数和一个成员变量:
    class MyClass {
        private Project project

        MyClass(Project project) {
          this.project = project
        }

        def doSomething() {
            final familyMembers = project.configurations['compile'].allDependencies.collect { dep ->
                dep.name
            }
        }

然后您可以像这样从项目中使用它:

    task 'do-something' << {
        final myObject = new MyClass(project)
        myObject.doSomething()
    }

4
要么这样做,要么编写一个插件或任务类,两者都可以访问project - Peter Niederwieser
@PeterNiederwieser - 我同意,如果类很好地“适应”新角色(插件或任务),它应该被转换为它。 - akhikhl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接