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']
]
}
}
在我的 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']
]
}
}