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

Mapstruct映射处理器空指针异常求助(JDK11+Lombok)

MapStruct编译时NullPointerException排查与解决

问题场景

执行mvn clean install编译时触发MapStruct映射处理器内部错误:

java.lang.NullPointerException at org.mapstruct.ap.internal.model.common.Type.hasAccessibleConstructor(Type.java:1078)

错误定位到Sports.java文件,涉及的类为父类Sports和子类Football,环境信息:

  • lombok: 1.18.30
  • org.mapstruct.version: 1.4.2.Final
  • JDK 11
  • Intellij 2023.2.5 Community Edition

原因分析

MapStruct 1.4.2.Final版本与Lombok的@SuperBuilder注解存在兼容性缺陷:

  1. 子类Football仅标注@SuperBuilder,未配套提供明确的构造器,也未正确继承父类的Builder结构;
  2. 父类Sports同时使用@NoArgsConstructor、@AllArgsConstructor和@SuperBuilder,导致Lombok生成的Builder元数据不符合MapStruct处理器的预期,在检查类的可访问构造器时出现空引用,触发NPE。

解决方法

1. 升级MapStruct版本(推荐)

MapStruct 1.5.0及以上版本修复了大量与Lombok Builder相关的兼容性问题,建议升级至最新稳定版,修改pom.xml中的依赖版本:

<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>

2. 修正Lombok注解配置(不升级版本时适用)

调整子类Football的注解,确保类具备明确的构造器或正确继承父类Builder:

  • 方案一:给Football添加构造器注解
    @Data
    @SuperBuilder
    @NoArgsConstructor
    @AllArgsConstructor
    public class Football extends Sports {
    
    }
    
  • 方案二:优化父类与子类的@SuperBuilder配置
    // Sports类
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @SuperBuilder(toBuilder = true)
    @Jacksonized
    @EqualsAndHashCode
    public class Sports { 
      private String name;
      private String foundation_year;
    }
    
    // Football类
    @Data
    @SuperBuilder(builderMethodName = "builder", toBuilder = true)
    public class Football extends Sports {
    
    }
    

3. 确保编译时处理器顺序正确

在maven-compiler-plugin中指定注解处理器顺序,让Lombok先完成代码生成,再由MapStruct处理:

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:16:12