Gradle,在 build.gradle 个脚本中创建对象

Gradle, creating objects in build.gradle scripts

在我的 gradle 插件中,我使用了其他 build.gradle 脚本,它看起来像:

build.gradle:

sciptInstance {
    name {
        arrayWithObjects = [
            {
                var1 = "val1"
                var2 = "val2"
            {
        ]
    }
}

在 gradle 插件中,我声明了容器来保存 class ScriptClass 的实例。此 class 具有字段 arrayWithObjects。 Class arrayWithObjects 元素的声明如下所示:

MyClass {
    def var1
    deg var2
}

在我的 SciptClass:

ScriptClass {
    // other fields
    MyClass[] arrayWithObjects

    // constructor and so on..
}

在尝试构建脚本时,我收到一个转换异常,提示我无法将闭包转换为对象。我试图用其他括号等在 build.gradle 中声明 arrayWithObjects,但没有任何效果。我也不知道去哪里找。也许你们中的一些人以前遇到过这个问题? 提前致谢。

编辑: 要重现此内容:

插件:

apply plugin: MyPlugin

apply from: 'example.gradle'

class MyPlugin implements Plugin<Project> {
    void apply(Project project) {
        def examples = project.container(ScriptClass)
        project.extensions.examples = examples
    }
}

class ScriptClass {
    String name
    MyClass[] arrayWithObjects

    ScriptClass(String name) {
        this.name = name
    }
}

class MyClass {
    def var1
    def var2
}

example.gradle:

examples {
    example {
        arrayWithObjects = [
                {
                    var1 = "val1"
                    var2 = "val2"
                }
        ]
    }
}

在主 build.gradle 中应用此插件并调用任何任务。

Here你可以找到解决问题的demo。基本上你需要使用 Map 而不是 Closure:

examples {
    example {
        arrayWithObjects = [
                [var1: 'varvar1', var2: 'varvar2']
        ]
    }
}