Gradle,过载扩展设置器

时间:2014-11-04 08:44:17

标签: groovy gradle

鉴于在gradle中注册的扩展名为foo:

class Foo {
     Project proj

     void setProject( Project project) {
            this.proj = project
     }

     void setProject( String project) {
            // do stuff
     }
}

我如何获得:

foo {
      project = ':random-project'
}

由于GroovyCastException,调用字符串setter而不是在装饰的扩展对象的setProperty中失败?

此问题的原因来自此问题:https://github.com/Centril/gradle-plugin-robospock/issues/5

3 个答案:

答案 0 :(得分:0)

由于我还没有看到更好的答案,我试图提出一个可能的替代方案。

如果您可以在proj中将String的类型保持为Foo,并且实际使用Foo类的实例,请使用{{1}查找项目您的插件可用的findProject对象上的方法。

project

您可以在class FooPlugin implements Plugin<Project> { // ... void apply(Project project) { // ... project.findProject(fooInstance.proj) } } findProject方法上找到更多信息,以便按路径at API Documentation找到项目

可能有一种方法可以访问Foo类中的当前Project实例,然后您可以使用重载的setter。

答案 1 :(得分:0)

这适用于Gradle版本2.0及更高版本,这可能是由于从Groovy 1.x迁移到2.x.如果可能的话,我建议使用更高版本的Gradle。

答案 2 :(得分:0)

来自Gradleware的Luke Daley告诉我,这是Groovy语言的限制:https://issues.apache.org/jira/browse/GROOVY-2500