如何在Gradle管理的Groovy类中实例化FileTree?

时间:2015-01-28 03:17:07

标签: groovy gradle

我有一个Gradle构建脚本,它变得太大了,所以我创建了一个实用程序类。 在这个类中我想使用Gradle fileTree(或任何其他Gradle类),我该怎么做? 要清楚,这是在build.gradle:

ext {
    utils = new Utils()
}

和Utils.groovy(在buildSrc / src / main / groovy中):

def chopBackgroundImage(String inPath, String outPath, int scale) {
       new File(outPath).mkdirs();
       def tree = fileTree(dir: inPath, include: '*.png') // doesnt work
    }

1 个答案:

答案 0 :(得分:2)

fileTree是在Project界面上定义的方法,因此需要将project实例传递给方法并导入Project Utils类。 Utils应如下所示:

import org.gradle.api.Project

public class Utils {
    def chopBackgroundImage(Project project, String inPath, String outPath, int scale) {
       new File(outPath).mkdirs();
       def tree = project.fileTree(dir: inPath, include: '*.png') 
    }
}

通过添加以下内容,在Project修改 build.gradle 中访问buildSrc

buildscript {
   dependencies {
      gradleApi()
   }
}

当然 - 因为groovy是一种动态语言chopBackgroundImage可以通过以下方式定义:

def chopBackgroundImage(project, inPath, outPath, scale) {
   new File(outPath).mkdirs()
   def tree = project.fileTree(dir: inPath, include: '*.png') 
}

不需要依赖! ;)