gradle:通过(文件)循环

时间:2016-03-12 03:30:49

标签: java gradle

我为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做任何原创的事情,所以我很可能在这里犯了一个愚蠢的错误。

建议?

2 个答案:

答案 0 :(得分:1)

目前,通过mytest扩展程序,您可以设置对单个文件的引用。在... collection.each ...循环的每次迭代中each下面的代码示例中,您将覆盖已设置的上一个文件 - 最后一个获胜。它不会以这种方式工作。而是将mytest扩展名更改为接受集合而不是单个文件,处理文件集合的任务然后查找您感兴趣的所有文件,分配它们并运行任务

答案 1 :(得分:0)

(警告:这可能不是一个很好的答案,但它有效)

的build.gradle

FileCollection collection = fileTree(dir: '/some/path').include('**/*.java')

collection.each { File file ->
    mytest {
        filename = file.path
    }
}

在java插件中:

myplugin.java

public class MyPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        project.getTasks().create("mytest", MyTask.class);

    }
}

MyTask.java

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);
    }
}