Groovy 找不到与我的参数匹配的方法
Groovy can't find a method matching my arguments
我对 Groovy 方法解析问题感到困惑。
我正在为 Gradle 自定义插件编写 Groovy 代码。
我的任务方法中有以下代码 class:
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
}
}
}
我稍后在同一个任务中也有一个方法定义class:
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 和对 "getYangFilesFromZip" 的调用之间添加了以下行:
print "this[$this] owner[$owner] delegate[$delegate]"
当我 运行 它时,它打印:
this[task ':yangGenerate'] owner[task ':yangGenerate'] delegate[task ':yangGenerate']
我还尝试了调用本身的变体,"getYangFilesFromZip"、"this.getYangFilesFromZip" 和 "owner.getYangFilesFromZip"。我什至尝试在闭包之前声明一个 "YangGenerate" 变量并从 "this" 分配它并引用它而不是其他变体。没有变化。
更新:
这是一个出现相同错误的最小测试用例:
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) {
}
}
应该是:
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)
}
}
不可能从 static 块调用 private 方法 getYangFilesFromZip
甚至不创建具有此 [=22] 的对象=] 声明。您应该创建对象或将方法签名更改为 static.
我对 Groovy 方法解析问题感到困惑。
我正在为 Gradle 自定义插件编写 Groovy 代码。
我的任务方法中有以下代码 class:
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
}
}
}
我稍后在同一个任务中也有一个方法定义class:
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 和对 "getYangFilesFromZip" 的调用之间添加了以下行:
print "this[$this] owner[$owner] delegate[$delegate]"
当我 运行 它时,它打印:
this[task ':yangGenerate'] owner[task ':yangGenerate'] delegate[task ':yangGenerate']
我还尝试了调用本身的变体,"getYangFilesFromZip"、"this.getYangFilesFromZip" 和 "owner.getYangFilesFromZip"。我什至尝试在闭包之前声明一个 "YangGenerate" 变量并从 "this" 分配它并引用它而不是其他变体。没有变化。
更新:
这是一个出现相同错误的最小测试用例:
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) {
}
}
应该是:
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)
}
}
不可能从 static 块调用 private 方法 getYangFilesFromZip
甚至不创建具有此 [=22] 的对象=] 声明。您应该创建对象或将方法签名更改为 static.