我試圖建立一個搖籃插件將允許以下內容:搖籃擴展爲NamedDomainObjectContainer封閉
myPluginConfig {
something1 {
// this is a closure
}
somethingElse {
// this is another closure
}
// more closures here
}
要做到這一點我相當肯定我需要使用NamedDomainObjectContainer
包裝一個Closure
集合,所以我已經設置了以下插件:
class SwitchDependenciesPlugin implements Plugin<Project> {
void apply(Project project) {
// add the extension
project.getExtensions().myPluginConfig = project.container(Closure)
// read the current configuration
NamedDomainObjectContainer<Closure> config = project.myPluginConfig
// test it out, always returns []
System.out.println(config)
}
}
什麼我做錯了,做我需要使用project.extensions.create
呢?如果是這樣,怎麼樣?
編輯:我的用例包括根據項目層次結構中定義的一些變量添加依賴項。例如,下面的配置將添加red
項目如果變量red
上project.ext
定義,或gson
否則:
myPluginConfig {
redTrue {
compile project(':red')
}
redFalse {
compile 'com.google.code.gson:gson:2.4'
}
greenTrue {
compile project(':green')
}
}
對於這種使用情況下,我需要有動態的名字myPluginConfig
,因此無論是Map
或一個NamedDomainObjectContainer
。
這個例子正是我試圖實現,只是,而不是'Book's我需要'Closure's,因爲我那麼就需要將它們傳遞給'project.dependencies'。 – frapontillo
這並不直接'Closure'爲關閉不執行'Named'接口也有一個'name'屬性工作。 –
那麼我怎樣才能使它工作?換句話說,Gradle如何用'依賴'來做到這一點? – frapontillo