我想使用SourceDirectorySet
从目录结构处理一些来源,并且我希望将输出保存在构建目录下,模仿原始目录结构。 E.g:
src / main / plantuml
+ dir1
+ dir11
+ file.pu
应该导致:
build / doc / plantuml
+ dir1
+ dir11
+ file.png
我怎么能实现它?
N.B。:SourceDirectorySet
是PatternFilterable
我想扩展janvolck的插件"gradle-plantuml-plugin"(已经有corresponding feature request),以便它在配置的目录下生成输出文件,但保留原始目录层次结构。 gradle插件的当前实现遍历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。
我未训练的学生直觉说完成这项任务应该很容易。我肯定错过了什么?
答案 0 :(得分:0)
我不熟悉插件,但据我了解您的要求:对于sourceRoot目录中的每个文件,您希望在destRoot中生成类似命名的文件,同时保持目录结构。
尝试一下:
def File sourceRoot = new File("src/main/plantuml")
def File destRoot = new File("build/doc/plantuml")
sourceRoot.eachFileRecurse(FileType.FILES) { File file ->
def relPath = sourceRoot.toURI().relativize(file.toURI())
def destFile = new File(destRoot, relPath.toString())
destFile.parentFile.mkdirs()
destFile.createNewFile() //alternatively use this path to create your png
}