2014-11-04 35 views
0

鑑於gradle這個註冊爲Foo的擴展:搖籃,超載擴展二傳手

class Foo { 
    Project proj 

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

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

如何獲得:

foo { 
     project = ':random-project' 
} 

調用串制定者,而不是失敗在裝飾延伸的setProperty對象由於GroovyCastException?

原因這個問題從這個問題出現了:https://github.com/Centril/gradle-plugin-robospock/issues/5

+0

也許嘗試'項目=項目(「:隨機項目」)'? – Opal 2014-11-04 14:17:42

+0

這顯然是解決這個問題的一種方法,但它並沒有回答這個問題......這與刪除一個功能是一樣的...... – Centril 2014-11-04 14:20:11

+0

好的。爲什麼你需要以這種方式實現它?你想達到什麼目的? – Opal 2014-11-04 16:27:12

回答

0

因爲我看不出有什麼更好的答案,我想提出一個可能的選擇。

如果你能保持的proj類型爲Foo一個String並在實際使用Foo類的實例,使用findProject方法提供給您的插件project對象上查找該項目。

class FooPlugin implements Plugin<Project> { 
    // ... 
    void apply(Project project) { 
     // ... 
     project.findProject(fooInstance.proj) 
    } 
} 

您可能會發現更多的findProjectproject方法,通過路徑來定位一個項目at API Documentation

有可能訪問你的Foo類當前項目實例,然後你可以使用重載二傳手的方式。

+0

所有這些類型的答案都是我的非解決方案...,而且我已經知道這是有效的......我特別想解決這個問題能夠使用DSL,或者確定它不可能,以便我可以移除DSL。將它存儲爲字符串不是我能做的事情。我很欣賞這種努力。 – Centril 2014-11-04 17:57:21

0

這適用於Gradle版本2.0和更高版本,這可能是由於從Groovy 1.x遷移到2.x.如果可能的話,我建議使用更高版本的Gradle。

+0

我正在使用Gradle 2.1,它不工作。 – Centril 2014-11-04 21:31:54