Groovy找不到匹配我的参数的方法

时间:2015-03-11 19:27:01

标签: groovy gradle

我对Groovy方法解决问题感到困惑。

我正在使用Groovy代码处理Gradle自定义插件。

我在Task类的方法中有以下代码:

    if (inspectDependencies) {
        project.configurations[yangFilesConfiguration].files.each { File file ->
            println file
            println "filetype:${file.getClass().getName()} excludeFilesType:${excludeFiles.getClass().getName()}"
            this.getYangFilesFromZip(file, excludeFiles).each { File yangFile
                println yangFile
            }
        }
    }

我稍后在同一个Task类中也有一个方法定义:

    private Collection<File> getYangFilesFromZip(File file, Collection<String> excludeFiles) {
    ....

当我运行此代码时,我看到以下内容:

filetype:java.io.File excludeFilesType:java.util.ArrayList
...
Could not find method getYangFilesFromZip() for arguments [C:\Users\dk068x\workspace2\YangUsingProject\libs\config-api-0.3.0-SNAPSHOT.jar, [target.yang]] on task ':yangGenerate'.

如您所见,参数的实际类型与方法的形式参数兼容。这里可能出现什么问题?

更新

我在第一个println和#34; getYangFilesFromZip&#34;的调用之间添加了以下行:

print "this[$this] owner[$owner] delegate[$delegate]"

当我运行它时,会打印出来:

this[task ':yangGenerate'] owner[task ':yangGenerate'] delegate[task ':yangGenerate']

我还尝试了调用本身的变体,使用&#34; getYangFilesFromZip&#34;,&#34; this.getYangFilesFromZip&#34;和&#34; owner.getYangFilesFromZip&#34;。我甚至试图宣布一个&#34; YangGenerate&#34;在关闭之前变量并从&#34;这个&#34;并参考而不是其他变化。没有变化。

更新

这是一个获得相同错误的最小测试用例:

import java.io.File;
import java.util.Collection;

class ResolutionProblem {
    static main(args) {
        Collection<String>  list = ["a", "b", "c", "d"];
        if (args.length > 0) {
            File    file = new File(".")
            list.each {
                owner.getYangFilesFromZip(file, list)
            }
        }
    }

    private Collection<File> getYangFilesFromZip(File file, Collection<String> excludeFiles) {
    }
}

1 个答案:

答案 0 :(得分:0)

应该是:

import java.io.File;
import java.util.Collection;

class ResolutionProblem {
    static main(args) {
        Collection<String> list = ["a", "b", "c", "d"];
        File file = new File(".")
        list.each {
           new ResolutionProblem().getYangFilesFromZip(file, list)
        }
    }

    public Collection<File> getYangFilesFromZip(File file, Collection<String> excludeFiles) {
        println(file)
        println(excludeFiles)
    }
}

静态块调用私有方法getYangFilesFromZip是不可能的,甚至不创建声明此类的对象。您应该创建对象或将方法签名更改为 static