我为gradle编写了一个简单的基于java的插件。我可以通过一个简单的电话获得它的输出:
apply plugin: 'localtest'
mytest {
set_filename = 'some/path'
}
...
然后通过
运行gradle runTest
我想遍历文件夹层次结构并为每个文件调用该函数。这样做:
FileCollection collection = fileTree(dir: '.').include('**/*.java')
collection.each { File file ->
println file.path
mytest {
set_filename = file.path
}
}
如果我将其作为gradle runTest
运行,我会打印目录树中的所有文件,但我的插件只会被调用列表中的最后一个文件。
这是我第一次尝试用gradle做任何原创的事情,所以我很可能在这里犯了一个愚蠢的错误。
建议?
答案 0 :(得分:1)
目前,通过mytest
扩展程序,您可以设置对单个文件的引用。在... collection.each ...
循环的每次迭代中each
下面的代码示例中,您将覆盖已设置的上一个文件 - 最后一个获胜。它不会以这种方式工作。而是将mytest
扩展名更改为接受集合而不是单个文件,处理文件集合的任务然后查找您感兴趣的所有文件,分配它们并运行任务
答案 1 :(得分:0)
(警告:这可能不是一个很好的答案,但它有效)
FileCollection collection = fileTree(dir: '/some/path').include('**/*.java')
collection.each { File file ->
mytest {
filename = file.path
}
}
在java插件中:
public class MyPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getTasks().create("mytest", MyTask.class);
}
}
public class MyTask extends DefaultTask {
private String filename;
public void setFilename(String filename) throws Exception
// this method will get called for every iteration of the gradle loop
test(filename);
}
}