根本原因是注解处理器未启用或lombok依赖配置不正确。需启用idea的annotation processors、检查pom.xml或build.gradle中compileonly+annotationprocessor配置、重启idea并清理缓存。

IDEA里Lombok插件装了但@Getter没生效
根本原因通常是插件启用后,IDEA没开启“注解处理器”或项目没正确识别Lombok依赖。不是插件没装好,而是两层配置没对齐。
检查步骤如下:
- 确认
Lombok Plugin已在 Settings → Plugins 中启用(不是仅安装) - 进入 Settings → Build → Compiler → Annotation Processors,勾选
Enable annotation processing - 如果是 Maven 项目,确保
pom.xml里有 Lombok 依赖,且 scope 不是test:<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency>
- 重启 IDEA(不是重载项目,是彻底关闭再打开)——很多人卡在这一步
使用 @Data 时 toString() 或 equals() 报红或不生成
这是典型“编译期生成 vs 编辑器感知”不同步问题。Lombok 的方法只在编译时注入,IDEA 需要靠插件模拟语义,一旦缓存错乱就会报红,但实际编译通过。
常见诱因和对策:
-
@Data默认会生成toString()、equals()、hashCode(),但如果类里已有同名方法(哪怕只是空实现),Lombok 就会跳过——删掉手写的冲突方法 - 如果用了
@EqualsAndHashCode(exclude = "field"),但字段名拼错,IDEA 插件无法推导,直接标红;检查exclude或include里的字段名是否真实存在且大小写一致 - 执行 Build → Rebuild Project 后仍报红?点 File → Invalidate Caches and Restart → Invalidate and Restart
Gradle 项目中 Lombok 注解不被编译器识别
Gradle 默认不开启 annotationProcessor 路径支持,即使加了依赖,javac 也看不到 Lombok 的 processor。
必须显式配置:
- 在
build.gradle(非build.gradle.kts)中添加:dependencies { compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' } - 用 Kotlin DSL(
build.gradle.kts)则改用:compileOnly(libs.lombok) annotationProcessor(libs.lombok)
,并确保libs.versions.toml里定义了对应版本 - 不要用
implementation替代compileOnly + annotationProcessor:前者会让 Lombok 进入运行时 classpath,可能引发冲突
Spring Boot 项目里 @Builder 和 @AllArgsConstructor 冲突
当类同时有 @Builder 和 @AllArgsConstructor(或 @RequiredArgsConstructor),Lombok 可能生成重复构造器,导致编译失败或 Spring 无法注入。
这不是 bug,是设计使然——@Builder 默认生成一个全参私有构造器 + builder 方法,而 @AllArgsConstructor 又生成一个公有全参构造器。
解决方式很直接:
- 删掉
@AllArgsConstructor,让@Builder自己管理构造逻辑(推荐) - 或者用
@Builder(access = AccessLevel.PACKAGE)控制 builder 访问级别,避免与 Spring 构造器注入冲突 - 若必须保留全参构造器供 Spring 使用,改用
@RequiredArgsConstructor(onConstructor_ = @__(@Autowired))并配合final字段,更符合 Spring Boot 的惯用法
真正麻烦的是混合用了 Lombok 和手动写的构造器、字段初始化、@PostConstruct —— 这些时机和顺序 IDE 很难推断,建议这类类干脆不用 Lombok 生成构造逻辑,保持明确可控。










