1
我試圖實現以下的DSL作爲一個搖籃插件:搖籃和嵌套擴展
plugin {
pluginA {
property1 ""
property2 ""
}
pluginB {
property3 ""
}
}
pluginA和pluginB什麼都不是一樣的,我不希望使用NamedDomainObjectContainer。 與以前的DSL一切正常:
pluginA {
property1 ""
property2 ""
}
pluginB {
property3 ""
}
project.pluginA.extensions.create('pluginA', PluginAExtension)
project.pluginB.extensions.create('pluginB', PluginBExtension)
而且,如果用戶已經定義了這些擴展我可以檢查:
if(project.pluginA != null) {
//Configure task
}
但因爲使用我的主要插件,如果我聲明子擴展這樣的:
project.extensions.create("plugin", PluginExtension)
project.plugin.extensions.create('pluginA', PluginAExtension)
project.plugin.extensions.create('pluginB', PluginBExtension)
如果用戶確實是:
project {
}
if(project.plugin.pluginA != null)
返回true
我想沒有plugin.extensions.create(),並直接在擴展類使用:
class PluginExtension {
PluginAExtension pluginA
PluginBExtension pluginB
}
,但現在我得到pluginA()== NULL始終。我現在可以將所有東西都聲明爲具有閉包的屬性,但對於以前工作的東西來說,這是很多作品。我只想補充一個封閉的插件
其實我錯了的東西見DefaultProject.copySpec(Closure):(!project.plugin = NULL) 如果總是真當我做project.extensions.create(「插件」,PluginExtension) 有沒有什麼辦法來檢查用戶是否定義了build.gradle中的插件{}塊? – NitroG42
使用我的示例代碼,你可以檢查'if(plugin.pluginA == null)' –
它完美的工作,謝謝! – NitroG42