Gradle插件扩展和枚举类型

时间:2014-11-11 14:27:20

标签: groovy gradle build.gradle

我正在创建一个带有自定义扩展程序的gradle插件:

project.extensions.create("myExtension", MyExtension.class)

MyExtension的样子:

class MyExtension {
  Set<MyEnum> mySet;
  MyEnum myEnum;
}

问题是我无法在build.gradle(使用标准DSL)中设置mySet

myExtension {
    myEnum = 'enumField1'
    mySet = ['enumField1']
}

我只为mySet获得java.lang.String cannot be cast to MyEnum,枚举转换的字符串适用于myEnum ...所以我正在考虑是否可以使用枚举类型的集合?有解决方案吗?

2 个答案:

答案 0 :(得分:3)

适用于myEnum,因为Groovy会自动转换分配给枚举属性的字符串。要为mySet进行相同的工作,您必须向接受字符串的扩展添加一个方法,将其转换为相应的枚举值(简单的转换将在Groovy中执行),并将后者添加到集合。您还必须初始化该集。

答案 1 :(得分:2)

我通过使用简单的java数组而不是通用Collection<T>来实现它:

class MyExtension {
  // string convertion doesn't work
  Set<MyEnum> mySet;
  // string convertion works fine
  MyEnum[] myArray;
  MyEnum myEnum;
}

然后可以按预期使用扩展名:

myExtension {
    myEnum = 'enumField1'
    mySet = ['enumField1']
}
希望它有所帮助...