SLF4J groovy注释编译错误';日志';在静态作用域中找到,但没有';t指的是局部变量、静态字段或类
我已经盯着这段代码看了一个小时,试图弄明白为什么在编译时没有提取日志。我正在使用gradle进行构建,并将依赖项列为: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
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 )