Lombok失效问题
在学习项目的过程中,我遇见了一个十分折磨人的问题:有时Lombok相关注解如@Data/@Setter以及@Slf4j/@Builder等注解会出现失效的问题,导致无法通过编译.
网络上能找到的原因无非这三点
- 没有安装Lombok插件
- 没有启用注解处理
- 依赖没有引入或是依赖冲突
可是我昨晚上运行项目时还能正常通过编译,为什么隔天就不行了呢?显然另有原因.
1 | java: JPS 增量注解进程已禁用。部分重新编译的编译结果可能不准确。使用构建进程“jps.track.ap.dependencies”VM 标志启用/禁用增量注解处理环境。 |
查看警告,尝试从这方面解决
一、JPS 增量注解进程与 Lombok 的关联
- JPS 增量注解进程的作用
JPS(Java Project System)是 Java 项目的编译管理进程,其 “增量注解处理” 功能的核心目的是优化编译效率:当代码发生局部修改时,仅重新编译受影响的文件,并触发相关注解处理器(如 Lombok)对修改部分进行处理,避免全量编译的耗时。 - 禁用后为何影响 Lombok?
Lombok 的工作原理是作为编译期注解处理器,在编译阶段动态生成 getter/setter、日志对象(@Slf4j)、建造者模式代码(@Builder)等字节码。
当 JPS 增量注解进程被禁用时:
增量编译(如 IDE 自动触发的局部编译)可能跳过 Lombok 的注解处理步骤;
若修改了带有 Lombok 注解的类(如新增字段、调整注解参数),旧的字节码未被更新,导致新增方法缺失、日志对象无法识别等 “失效” 现象。
二、解决方案
清理缓存,重新构建项目(临时解决)
启用增量注解处理(彻底解决)
通过配置jps.track.ap.dependencies参数启用增量注解处理,确保 Lombok 在增量编译时正常工作。在路径File > Settings > Build, Execution, Deployment > Compiler > Java Compiler
下的“Additional command line parameters” 中添加参数:
1 | -Djps.track.ap.dependencies=true |
同时在在maven-compiler-plugin
中添加编译参数:
1 | <compilerArgs> |
这样启用JPS增量注解进程,确保每次修改后可以部分重新编译,确保注解生效。
笔者重新构建项目后解决了问题,然后询问AI设置了参数,暂不清楚后续还会不会出现同样的问题。