Java 没有方法的签名:build\u hash$\u copyrursely\u closure3.doCall()适用于参数类型

Java 没有方法的签名:build\u hash$\u copyrursely\u closure3.doCall()适用于参数类型,java,groovy,Java,Groovy,我真的被这个错误缠住了。这对我来说毫无意义。为什么参数类型UnixPath,null?我试着打印tempDir变量,结果正如预期的那样-e.I.Path对象具有正确的路径 有什么想法吗 没有方法的签名:build_76p6jmah0vklon2l29au5dqlcr$\u copyrursely_closure3.doCall()适用于参数类型:(sun.nio.fs.UnixPath,null)值:[generic/bundle,] 可能的解决方案:doCall()、doCall(java.l

我真的被这个错误缠住了。这对我来说毫无意义。为什么参数类型
UnixPath,null
?我试着打印
tempDir
变量,结果正如预期的那样-e.I.Path对象具有正确的路径

有什么想法吗

没有方法的签名:build_76p6jmah0vklon2l29au5dqlcr$\u copyrursely_closure3.doCall()适用于参数类型:(sun.nio.fs.UnixPath,null)值:[generic/bundle,] 可能的解决方案:doCall()、doCall(java.lang.Object)、findAll()、findAll()


您面临的问题是由于
FileVisitor
对象没有正确构造。方法
visitFileFailed
postVisitDirectory
需要两个参数,但您没有提供任何参数。解决问题后,
copyrecursive
的正确方法定义为:

void copyRecursively(Path sourceDir, Path destinationDir) {
    FileVisitor visitor =[
            preVisitDirectory : { Path filePath, BasicFileAttributes attrs ->
                Path newDirectory = destinationDir.resolve(sourceDir.relativize(filePath))
                Files.copy(filePath, newDirectory, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE
            },
            visitFile         : { Path filePath, BasicFileAttributes attrs ->
                Files.copy(filePath, destinationDir.resolve(sourceDir.relativize(filePath)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE
            },
            visitFileFailed   : { file, IOException ex -> return FileVisitResult.CONTINUE },
            postVisitDirectory: { dir, IOException ex -> return FileVisitResult.CONTINUE }
    ] as FileVisitor
    Files.walkFileTree(sourceDir, [FileVisitOption.FOLLOW_LINKS] as Set, Integer.MAX_VALUE, visitor)
}

copyrecursely
方法是否在同一范围/脚本中定义?它是。我也有其他类似的方法,它们也很有效
void copyRecursively(Path sourceDir, Path destinationDir) {
    FileVisitor visitor =[
            preVisitDirectory : { Path filePath, BasicFileAttributes attrs ->
                Path newDirectory = destinationDir.resolve(sourceDir.relativize(filePath))
                Files.copy(filePath, newDirectory, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE
            },
            visitFile         : { Path filePath, BasicFileAttributes attrs ->
                Files.copy(filePath, destinationDir.resolve(sourceDir.relativize(filePath)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE
            },
            visitFileFailed   : { file, IOException ex -> return FileVisitResult.CONTINUE },
            postVisitDirectory: { dir, IOException ex -> return FileVisitResult.CONTINUE }
    ] as FileVisitor
    Files.walkFileTree(sourceDir, [FileVisitOption.FOLLOW_LINKS] as Set, Integer.MAX_VALUE, visitor)
}