Java 21中MapStruct生成的实现类为空问题求助
MapStruct生成空实现类的排查方案
1. 版本兼容性问题
你的项目使用Java 21 + MapStruct 1.5.5.Final,该版本的MapStruct对Java 21的支持有限,建议升级MapStruct到1.6.0.Final及以上(此版本开始正式支持Java 21)。同时需确保Lombok版本与MapStruct兼容,比如使用Lombok 1.18.26+。
2. 构建工具注解处理器配置缺失
MapStruct和Lombok均依赖注解处理器,若未在构建脚本中明确配置,会导致MapStruct无法读取Lombok生成的getter/setter,进而生成空实现。
Maven配置示例
在pom.xml中补充以下配置:
<properties> <mapstruct.version>1.6.0.Final</mapstruct.version> <lombok.version>1.18.30</lombok.version> </properties> <dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <!-- 支持Java 21的版本 --> <configuration> <source>21</source> <target>21</target> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> <!-- 添加Lombok与MapStruct的绑定依赖 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
Gradle配置示例
在build.gradle中补充以下配置:
plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' id 'io.freefair.lombok' version '8.4' // 自动处理Lombok注解 } dependencies { implementation 'org.mapstruct:mapstruct:1.6.0.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.0.Final' annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0' } java { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 }
3. IDE注解处理器未启用
若使用IntelliJ IDEA,需检查以下设置:
- 开启
Settings > Build, Execution, Deployment > Compiler > Annotation Processors中的Enable annotation processing选项 - 清理IDE缓存:执行
File > Invalidate Caches...,重启IDE后重新执行构建命令(mvn clean install或gradle clean build)
4. 验证Lombok注解生效情况
MapStruct依赖实体类和DTO的getter/setter完成映射,若Lombok未生成这些方法,会导致映射逻辑为空。可通过以下方式验证:
- 查看编译后的
Country.class和CountryDto.class文件,确认是否存在getId()、getFrenchName()等getter方法,以及对应的setter方法 - 若没有生成,需检查IDE是否安装Lombok插件,构建配置是否正确引入Lombok依赖
内容的提问来源于stack exchange,提问作者Fizik26
相关产品推荐
相关产品推荐

