症状
错误“Lombok 注解未处理 — getter 缺失”指向一个明确的失效模式。下面依次给出症状、定位该原因的检查命令、根本原因、修复方案,以及证明修复有效的验证步骤。
可观察到的症状包括:
- 尽管标有 @Data,编译仍报 “cannot find symbol: method getName()”
- IDE 无错误,命令行构建失败
- JDK 升级后开始出错
诊断
先在隔离环境中复现故障,再按顺序执行以下检查,逐步缩小范围。
步骤 1
mvn -q clean compile 2>&1 | grep "cannot find symbol" | head
getter 缺失证明处理器未运行,而非注解被忽略。
步骤 2
mvn dependency:tree -Dincludes=org.projectlombok:lombok && java -version
Lombok 需足够新以支持该 JDK;旧 Lombok 在新 JDK 上会静默失败。
常见诱因(按出现频率排序):
- 构建工具中禁用了注解处理
- Lombok 版本不支持当前 JDK
- Lombok 只在编译类路径上,未加入注解处理器路径
根因
Lombok 通过注解处理器生成代码。若处理被禁用,或 Lombok 版本早于该 JDK,处理器不会运行,getter/builder 便不会生成,编译无法解析。
修复
启用注解处理,升级 Lombok 到兼容 JDK 的版本,将其加入 annotationProcessor 路径,并确保编译器插件处理注解。
注意:Lombok 与编译器内部耦合紧密;JDK 升级可能使其失效直到 Lombok 适配,因此应共同锁定版本。
<!-- pom.xml -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
验证
重新构建并确认 getter 可解析;对生成的类运行 javap 查看合成方法。
修复后补充一条回归测试,复现原始症状,防止问题再次出现。
这类故障通常是环境问题而非纯逻辑错误,因此在缺陷记录中应写明完整命令、环境变量与工作目录。请用最小的脚本复现,待最小用例清楚后再扩大范围。为这类故障准备一份简短的排查清单,能显著减少下次排障时间。