无法调用fileTree(Object,Closure)签名

时间:2012-02-21 01:54:39

标签: groovy gradle

我有一个方法,它接受一个字符串和一个闭包,我在我的插件约定中包含它:

def someMethod( String obj, Closure closure) {
    println('HERE I AM')
    confFileTree = project.fileTree( obj, closure )
}

从Junit测试我称之为:

project.convention.plugins.license.licenseFiles( 'src') {
    include "main/java/**"
    include "main/resources/*.properties"
    exclude "**/Licensed.java"
}

我知道这个方法被调用,因为'HERE I AM'被打印出来了。但是我接到一个错误说:

org.gradle.api.internal.MissingMethodException: 
    Could not find method fileTree() for arguments 
    [src, nl.javadude.gradle.plugins.license.tasks.LicenseTaskTest$_shouldScanFilesForLicenseWithExclude_closure1@3cbdb6ae] 
    on root project 'test'.

我应该声明这段代码最初刚刚调用了fileTree的Closure形式,在闭包中使用了“from'src'”,这很好,但是Gradle里程碑8告诉我它是一个不推荐使用的方法。

1 个答案:

答案 0 :(得分:1)

你确定测试是针对m8运行的吗?无论如何,这里有一些改进的建议(因为我已经知道你想要实现的目标):

  • 我认为您不想构建自己的文件树。您只希望用户传递一个“过滤器”闭包(就像您的示例中那样),然后使用sourceSets.main.java方法将其应用于源目录集(例如FileTree.matching(Closure))。您将获得一个应用过滤器的新文件树。
  • 我建议使用扩展名而不是约定对象
  • 从Groovy代码访问约定对象或扩展时,您不需要冗长的语法。在您的单元测试示例中,您只需说project.licenseFiles(...) {...}