我有一个任务需要使用与生成的输出相同的目录,因为它用于输入(它从模板和.xsd文件生成-ext.xsd文件)。我想我有两种可能的解决方案,看起来它们正在发挥作用。
使用FileNameFinder,如下所述:http://mrhaki.blogspot.com/2009/11/groovy-goodness-finding-files-with.html
task generateExtXsdFromTemplates {
inputs.dir "$projectDir/src/main/resources"
outputs.files new FileNameFinder().getFileNames("$projectDir/src/main/resources", "**/*-ext.xsd")
...
}
使用traverse或eachFileRecurse,如下所述:Get a list of all the files in a directory (recursive)
task generateExtXsdFromTemplates {
inputs.dir "$projectDir/src/main/resources/xsd"
def files = [];
def processFileClosure = {
println "working on ${it.canonicalPath}: "
if (it.canonicalPath.endsWith("-ext.xsd")) {
println "adding ${it.canonicalPath}: "
files.add (it.canonicalPath);
}
}
new File("$projectDir/src/main/resources/xsd").eachFileRecurse(FileType.FILES, processFileClosure);
outputs.files files
...
}
我认为这些解决方案的问题是输入配置缓存/覆盖生成的输出文件。我不知道如何仅为输出而不是输入配置覆盖-ext.xsd。
这个问题是否有模式或更好的解决方案?