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

在我的gradle插件中,我正在使用其他build.gradle脚本,如下所示:

build.gradle:

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

在gradle插件中,我声明了容器来保存ScriptClass类的实例.此类具有字段arrayWithObjects. 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"
                }
        ]
    }
}

在main build.gradle中,应用此插件并调用任何任务.

解决方法:

Here您可以找到一个解决问题的演示.基本上,您需要使用Map而不是Closure:

examples {
    example {
        arrayWithObjects = [
                [var1: 'varvar1', var2: 'varvar2']
        ]
    }
}
上一篇:android-如何使用Anko DSL设置NavigationView的headerView?


下一篇:isopod dsl 框架管理kubernetes 配置