我试图用maven和lombok的@Slf4j Logger构建一个Java 11项目,但maven无法识别log
变量。IntelliJ确实能够构建该项目。
错误是
[ERROR]: cannot find symbol variable log
字符串
项目和模块SDK都是Java 11。Lombok版本是1.18.2:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
型
我的maven编译器设置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
型
我已经试过了:
- 关闭“注解处理”,然后再次打开
- 重新安装Lombok插件
- 清除.m2/repository文件夹
- 手动添加lombok.jar作为Annotation Processor
- 将Lombok路径添加到注解处理器的
maven-compiler-plugin
列表
4条答案
按热度按时间jm2pwxwz1#
这是使用
@Slf4j
lombok日志注解的最小示例配置。你需要一个日志facade和一个实现,在这个例子中,我将使用slf4j(作为facade)和logback(作为实现)。
pom.xml
字符串
main.java
型
如果遇到问题,请始终尝试强制在项目文件夹
mvn -U clean package
中运行maven依赖项更新,并在IDE中重新导入maven项目的数据
mm5n2pyu2#
我怀疑这是一个误导性的错误消息,因为Lombok在编译过程中挂接了一个点。
在字节码中,没有导入的概念。类被它们的完全限定名替换(例如
Integer
至java.lang.Integer
)。因此,在编译中的某个时刻,导入被解析、应用,并且任何未知的类(例如由于缺乏正确的相关性)将在该阶段抛出错误。由于
@Slf4j
意味着您不需要导入org.slf4j.Logger
,因此对于此类,上面描述的步骤将被忽略。在Lombok附加了
log
字段之后,编译器必须随后查看它的用法,查看它无法识别的类org.slf4j.Logger
并抛出错误。在正常情况下,由于早期的编译阶段,唯一可能的原因是字段不存在,因此推断符号log
必须丢失。它真正无法理解的是字段log
的 type。因为Lombok在编译过程中进行了更改,所以我猜像这样的虚假错误总是有可能的。也许Lombok开发人员可以通过自己检查
org.slf4j.Logger
来修复它。Lombok提供的大多数功能都不涉及“导入”外部类,因此我并不感到惊讶,它没有尽可能优雅地处理这种边缘情况。如果添加SLF4J的依赖项,编译器将不再抱怨。
nzrxty8p3#
在lombok.log.custom.declaration属性的lombok.config文件中,使用包含类包的全名
字符串
wh6knrhe4#
如果您已经添加了lombok插件并启用了lombok注解,那么问题出在IDE缓存上。
Invalidate Caches
Invalidate and Restart的