Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SLF4J groovy注释编译错误';日志';在静态作用域中找到,但没有';t指的是局部变量、静态字段或类_Groovy_Slf4j - Fatal编程技术网

SLF4J groovy注释编译错误';日志';在静态作用域中找到,但没有';t指的是局部变量、静态字段或类

SLF4J groovy注释编译错误';日志';在静态作用域中找到,但没有';t指的是局部变量、静态字段或类,groovy,slf4j,Groovy,Slf4j,我已经盯着这段代码看了一个小时,试图弄明白为什么在编译时没有提取日志。我正在使用gradle进行构建,并将依赖项列为: apply plugin: 'groovy' repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy:2.2.1' compile 'org.slf4j:slf4j-api:1.7.6' provided 'org.projectlo

我已经盯着这段代码看了一个小时,试图弄明白为什么在编译时没有提取日志。我正在使用gradle进行构建,并将依赖项列为:

apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy:2.2.1'
    compile 'org.slf4j:slf4j-api:1.7.6'
    provided 'org.projectlombok:lombok:1.12.4'
    runtime 'ch.qos.logback:logback-core:1.1.1'
    runtime 'ch.qos.logback:logback-classic:1.1.1'
    testCompile 'junit:junit:4.11'
}
我的“代码块”是一个名为
FilesUtil
的类,用
@groovy.logging.util.SLF4J
注释,它包含一个
静态
方法,该方法使用注释javadoc建议的
log
变量

import groovy.util.logging.Slf4j

import java.nio.file.FileVisitResult
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.SimpleFileVisitor
import java.nio.file.attribute.BasicFileAttributes

import static java.nio.file.FileVisitResult.CONTINUE;

@Slf4j
class FilesUtil {
    def static deleteDirectory(Path path) {
        Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file,
                                             BasicFileAttributes attrs) throws IOException {
                log.trace("deleting file: $file")
                System.out.println("Deleting file: " + file)
                Files.delete(file);
                log.trace("deleted file: $file")
                return CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir,
                                                      IOException exc) throws IOException {
                if (exc == null) {
                    log.trace("deleting directory: $dir")
                    Files.delete(dir);
                    log.trace("deleted directory: $dir")
                    return CONTINUE;
                } else {
                    throw exc;
                }
            }
        })
    }
} 

沃利在哪里?(我找不到的错误…Waldo对你们美国人来说)

因为你们有一个内部匿名类,它似乎没有看到生成的
log
变量。如果将
log.trace
更改为
FilesUtil.log.trace
,它似乎可以工作

或者,如果使用
映射
作为
SimpleFileVisitor
的代理,它似乎也可以工作:

    Files.walkFileTree(path, [ visitFile: { Path file, BasicFileAttributes attrs ->
            log.trace("deleting file: $file")
            System.out.println("Deleting file: " + file)
            //Files.delete(file);
            log.trace("deleted file: $file")
            return CONTINUE;
        },
        postVisitDirectory: { Path dir, IOException exc ->
            if (exc == null) {
                log.trace("deleting directory: $dir")
                //Files.delete(dir);
                log.trace("deleted directory: $dir")
                return CONTINUE;
            } else {
                throw exc;
            }
        } ] as SimpleFileVisitor )

不确定根本原因或目前是否是一个bug…没有太多时间思考;-)

不过,我很好奇是什么阻碍了编译时的名称解析,我认为这可能需要一些groovy文档挖掘,我们不是都喜欢这样吗。
    Files.walkFileTree(path, [ visitFile: { Path file, BasicFileAttributes attrs ->
            log.trace("deleting file: $file")
            System.out.println("Deleting file: " + file)
            //Files.delete(file);
            log.trace("deleted file: $file")
            return CONTINUE;
        },
        postVisitDirectory: { Path dir, IOException exc ->
            if (exc == null) {
                log.trace("deleting directory: $dir")
                //Files.delete(dir);
                log.trace("deleted directory: $dir")
                return CONTINUE;
            } else {
                throw exc;
            }
        } ] as SimpleFileVisitor )