我正在编写一个小 gradle 插件,它需要公开两个源位置的配置。我目前正在通过项目扩展执行此操作,并且消费者 gradle 文件的语法如下:
generator {
idl {
baseDir = "src"
include = "*.idl"
exclude = "**/.svn"
}
template {
baseDir = "src"
include = "*.template"
exclude = "**/.svn"
}
}
我的第一次尝试是通过在扩展类上有两个属性来完成的,如下所示:
class GeneratorExtension {
public static final NAME = "generator"
private Project project
GeneratorExtension(Project project) {
this.project = project
}
@Input ConfigurableFileTree idl
@Input ConfigurableFileTree template
void idl(String dir, Closure closure) {
idl = project.fileTree(dir, closure)
}
void template(String dir, Closure closure) {
template = project.fileTree(dir, closure)
}
}
这将 gradle 文件语法更改为:
generator {
idl (dir = "src") {
include = "*.idl"
exclude = "*"
}
template (dir = "src") {
include = "*.template"
exclude = ""
}
}
现在这可行,但它并没有给我我想要的干净的可用性。我对 gradle 和 groovy 都很陌生,看起来我可以通过使用 DefaultNamedDomainObjectSet 来完成我想要的事情,但是它引用了内部类,所以这就是我在这里的原因。
添加扩展使用 FileTree 的正确方法是什么,但保持干净的使用者语法?
提前致谢。