IDEA 与 Maven 编译 MapStruct 结果不一致 (AI总结)
·
一、问题现象
在使用 MapStruct + Lombok + Builder 模式 时,发现 IDEA Run 编译 和 Maven compile 生成的代码不一致:
| 编译方式 | 生成代码 | 映射字段 |
|---|---|---|
| IDEA Run | Setter 模式(new Object(); setXxx()) | ✅ 映射所有字段(包括父类) |
| Maven compile | Builder 模式(Builder.builder().xxx()) | ✅ 只映射子类字段 |
再有的场景下,会导致代码出错,比如使用jpa时, 如果转换对象是,copy了id,save 会从复制变为更新操作,所以要特别注意。
二、根本原因
IDEA 和 Maven 使用了不同的注解处理器配置:
-
IDEA 内置了 Lombok 和 MapStruct 的智能支持,默认使用 Setter 模式并自动映射所有字段
-
Maven 严格按照
pom.xml中的annotationProcessorPaths配置执行,默认使用 Builder 模式(如果类有@Builder)并只映射当前类声明的字段
关键差异点:
-
lombok-mapstruct-binding依赖的有无会显著影响生成策略 -
不同版本的 MapStruct 对 Builder 的支持程度不同
-
父类字段的访问修饰符(
privatevsprotected)会影响映射行为
三、解决方法:
// todo
IDEA 2024.3.4 设置了 Compiler 相关配置没有生效。
更多推荐





所有评论(0)