我正在使用Java构建Gradle插件,因为我想利用一些Java库。作为插件的一部分,我需要列出和处理文件的文件夹。我可以在gradle构建文件中找到许多如何执行此操作的示例:
FileTree tree = fileTree(dir: stagingDirName)
tree.include '**/*.md'
tree.each {File file ->
compileThis(file)
}
但是如何使用Gradle的Java api在Java中执行此操作?
底层的FileTree Java类具有非常灵活的输入参数,这使得它非常强大,但是很难确定哪种输入实际上会起作用。
答案 0 :(得分:0)
它实际上是相同的,例如project.fileTree(someMap)
。甚至只有基本目录(而不是地图)的fileTree
方法的重载。您可以使用for-each循环而不是闭包来代替each
,而不是闭包,您通常可以使用实现Action
接口的匿名内部类(尽管fileTree
似乎缺少这些方法重载)。 Gradle Build Language Reference有详细信息。 PS:您还可以利用Groovy的Java库。
答案 1 :(得分:0)
以下是我在基于java的gradle任务中执行此操作的方法:
public class MyPluginTask extends DefaultTask {
@TaskAction
public void action() throws Exception {
// sourceDir can be a string or a File
File sourceDir = new File(getProject().getProjectDir(), "src/main/html");
// or:
//String sourceDir = "src/main/html";
ConfigurableFileTree cft = getProject().fileTree(sourceDir);
cft.include("**/*.html");
// Make sure we have some input. If not, throw an exception.
if (cft.isEmpty()) {
// Nothing to process. Input settings are probably bad. Warn user.
throw new Exception("Error: No processable files found in sourceDir: " +
sourceDir.getPath() );
}
Iterator<File> it = cft.iterator();
while (it.hasNext()){
File f = it.next();
System.out.println("File: "+f.getPath()"
}
}
}