2
我在写一个需要公开两个源位置配置的小gradle插件。我通过一个项目延长目前这样做的,消费者gradle这个文件将有如下语法:在自定义gradle插件中创建SourceSet样式语法
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,但保持干净的消费者语法?
在此先感谢。
退房'project.container()',例如在[Gradle Build Language Reference]中(http://gradle.org/docs/current/dsl/index.html)。 –
感谢您的提示!我现在以我想成为的方式运转起来! – Myles