如何使用Gradle';什么是Java API?
我正在用Java构建一个Gradle插件,因为我想利用一些Java库。作为插件的一部分,我需要列出和处理文件夹中的文件。我可以在gradle构建文件中找到许多这样做的示例:如何使用Gradle';什么是Java API?,java,gradle,Java,Gradle,我正在用Java构建一个Gradle插件,因为我想利用一些Java库。作为插件的一部分,我需要列出和处理文件夹中的文件。我可以在gradle构建文件中找到许多这样做的示例: FileTree tree = fileTree(dir: stagingDirName) tree.include '**/*.md' tree.each {File file -> compileThis(file) } 但我如何使用Gradle的JavaAPI在Java中实现这一点呢 底
FileTree tree = fileTree(dir: stagingDirName)
tree.include '**/*.md'
tree.each {File file ->
compileThis(file)
}
但我如何使用Gradle的JavaAPI在Java中实现这一点呢
底层的FileTree Java类具有非常灵活的输入参数,这使得它非常强大,但很难确定哪种类型的输入将实际工作。实际上是相同的,例如
project.FileTree(someMap)
。甚至还有一个超负荷的fileTree
方法,它只接受基本目录(而不是映射)。您可以使用for-each循环代替each
,而不是闭包,您通常可以使用匿名内部类来实现Action
接口(尽管fileTree
似乎缺少这些方法重载)。报告中有细节。PS:您还可以利用Groovy的Java库。以下是我在基于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()"
}
}
}
公共类MyPluginTask扩展了DefaultTask{
@任务行动
public void action()引发异常{
//sourceDir可以是字符串或文件
File sourceDir=新文件(getProject().getProjectDir(),“src/main/html”);
//或:
//字符串sourceDir=“src/main/html”;
ConfigurableFileTree cft=getProject().fileTree(sourceDir);
cft.包括(“***.html”);
//确保我们有一些输入。如果没有,抛出异常。
if(cft.isEmpty()){
//无需处理。输入设置可能不正确。警告用户。
抛出新异常(“错误:在sourceDir中找不到可处理文件:”+
sourceDir.getPath());
}
迭代器it=cft.Iterator();
while(it.hasNext()){
文件f=it.next();
System.out.println(“文件:+f.getPath()”
}
}
}