You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven编译时无法使用SLF4J的@Slf4j注解,报“cannot find symbol: variable log”错误

Maven编译时无法使用SLF4J的@Slf4j注解,报“cannot find symbol: variable log”错误

看起来你遇到的问题核心是Maven编译时没有正确触发Lombok的注解处理器,而IntelliJ能正常运行是因为IDE自身做了特殊处理。咱们一步步拆解问题和解决方法:

问题1:子模块POM的Parent配置完全不匹配

你的根POM的groupId是com.myapp、artifactId是dummy,但子模块里的parent却写了com.trax.scheduler——这就导致子模块根本没继承到根POM里pluginManagement中配置的、带Lombok注解处理器的maven-compiler-plugin。Maven编译子模块时用的是默认的编译插件,自然找不到Lombok生成的log变量。

修复方法:把子模块的Parent配置改成和根POM一致,同时调整子模块的artifactId匹配根模块的module名称(你根模块里写的是<module>dummy-service</module>,但子模块现在artifactId是scheduler-service,这也会导致Maven找不到子模块,得统一):

<parent>
    <groupId>com.myapp</groupId>
    <artifactId>dummy</artifactId>
    <version>${revision}</version>
</parent>

<!-- 子模块可以删掉自己的groupId,会继承parent的;artifactId要和根模块的module节点对应 -->
<artifactId>dummy-service</artifactId>
<name>dummy-service</name>

问题2:根POM存在冗余且冲突的编译插件配置

你根POM的<build><plugins>节点下直接定义了一个旧版本的maven-compiler-plugin(3.5.1),这个配置没有包含Lombok的注解处理器路径;而pluginManagement里虽然有正确的3.7.0版本带注解处理器的配置,但因为子模块没正确继承,加上这个直接定义的插件优先级更高,导致Maven编译时用了旧的、无注解处理器的配置。

修复方法:删掉根POM中<build><plugins>下的这个旧maven-compiler-plugin配置,只保留pluginManagement里的那个。这样所有子模块继承后,编译时会自动加载Lombok的注解处理器。

为什么IntelliJ能正常运行?

IntelliJ IDEA默认会自动识别Lombok依赖,只要你安装了Lombok插件,IDE就会在后台自动启用注解处理器,生成log变量——所以不管Maven配置有问题,IDE里都能正常编译运行。但Maven命令行编译是严格按照POM配置执行的,所以会暴露配置问题。

做完以上修改后,执行mvn clean compile,应该就能正常编译通过了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:49:34