← 中文资源

简体中文版本

Lombok 注解未处理 — getter 缺失

通过启用注解处理、让 Lombok 与 JDK 版本对齐,并调整编译器插件顺序,修复 Lombok 场景下的 “cannot find symbol getX”。

阅读英文原文

症状

错误“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 查看合成方法。

修复后补充一条回归测试,复现原始症状,防止问题再次出现。

这类故障通常是环境问题而非纯逻辑错误,因此在缺陷记录中应写明完整命令、环境变量与工作目录。请用最小的脚本复现,待最小用例清楚后再扩大范围。为这类故障准备一份简短的排查清单,能显著减少下次排障时间。