You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MapStruct无法识别Lombok Builder,编译报错:ReferenceGroup无可用构造方法

MapStruct无法识别Lombok @Builder编译错误解决

编译错误

ReferenceGroup does not have an accessible constructor.

相关代码

Mapper接口方法

@Mapping(source = "groups", target = "nestedGroups")
@Mapping(source = "references", target = "nestedReferences")
net.gencat.transversal.espaidoc.domain.model.reference.ReferenceGroup toDomainModel(
        ReferenceGroup referenceGroup);

ReferenceGroup实体类

@Getter
public class ReferenceGroup {

    private final List<NestedGroup> nestedGroups;
    private final List<NestedReference> nestedReferences;

    @Builder
    private ReferenceGroup(List<NestedGroup> nestedGroups, List<NestedReference> nestedReferences) {
        // 构造方法具体实现
    }
}

Maven编译插件配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>${maven.compiler.source}</source>
        <target>${maven.compiler.target}</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org-mapstruct.version}</version>
            </path>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </path>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-mapstruct-binding</artifactId>
                <version>0.2.0</version>
            </dependency>
        </annotationProcessorPaths>
        <compilerArgs>
        </compilerArgs>
    </configuration>
</plugin>

问题背景

ReferenceGroup没有公开构造方法,仅通过Lombok的@Builder生成私有构造和Builder类。测试代码里能正常调用该Builder,但MapStruct编译时无法识别,抛出构造方法不可访问的错误。另外项目中存在ReferenceGroupPathBuilder类,需确认是否影响MapStruct对Builder的识别。

解决办法

  1. 升级MapStruct版本:MapStruct 1.4及以上版本对Lombok Builder的支持更成熟,检查${org-mapstruct.version}是否低于1.4,建议升级到1.4.x或更高稳定版。
  2. 调整注解处理器顺序:在annotationProcessorPaths里把lombok放在mapstruct-processor前面,确保Lombok先生成Builder代码,MapStruct后续能正确识别。
  3. 显式指定MapStruct使用Builder:在Mapper方法上添加@BeanMapping(builder = @Builder),强制MapStruct使用Builder来创建实例:
    @Mapping(source = "groups", target = "nestedGroups")
    @Mapping(source = "references", target = "nestedReferences")
    @BeanMapping(builder = @Builder)
    net.gencat.transversal.espaidoc.domain.model.reference.ReferenceGroup toDomainModel(
            ReferenceGroup referenceGroup);
    
  4. 排查ReferenceGroupPathBuilder干扰:检查该类是否与ReferenceGroup.Builder存在类名冲突或类路径覆盖问题,确保MapStruct能找到正确的Builder类。
  5. 更新lombok-mapstruct-binding版本:当前使用的0.2.0版本较老,建议升级到最新稳定版(如0.2.1),提升两者的兼容性。

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:35:03