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