我想使用 a 处理来自目录结构的一些源,SourceDirectorySet
并且我想将输出保存在构建目录下,模仿原始目录结构。例如:
src / main / plantuml
+ dir1
+ dir11
+ file.pu
应该导致:
build / doc / plantuml
+ dir1
+ dir11
+ file.png
我怎样才能实现它?
注意:SourceDirectorySet
是PatternFilterable
背景
我想扩展 janvolck 的插件“gradle-plantuml-plugin”(已经有相应的功能请求),以便它在配置的目录下生成其输出文件,但保持原始目录层次结构。gradle 插件的当前实现会遍历 a 的所有文件,SourceDirectorySet
并在源文件所在的同一目录中生成输出文件。
这是我能得出的最接近的结果:
// Process directory trees
mySourceDirectorySet.srcDirTrees.each { DirectoryTree d ->
project.logger.debug("Processing srcDirTree " + d.dir
+ "; patterns.excludes: " + d.patterns.excludes
+ "; patterns.includes" + d.patterns.includes)
// Reconstruct a FileTree from the directory tree, as I cannot find
// any means to get the files directly from 'd' (1)
// ... and traverse its files
project.fileTree(dir: d.dir,
excludes: d.patterns.excludes,
includes: d.patterns.includes).each { File f ->
project.logger.info("-- Input file: " + f)
def relPath = d.dir.toURI().relativize(f.parentFile.toURI())
def outputPath = "/myOutputDir/" + relPath
option.setOutputDir(project.file(outputPath))
processFile(f, option);
}
}
不幸的是,这个技巧(1)
似乎不起作用,我无法重新创建合适的 FileTree。
我未经训练的 gradle 直觉说完成这项任务应该很容易。我肯定错过了什么?