Quarkus集成MapStruct遇UnsatisfiedResolutionException问题求助
解决Quarkus中MapStruct依赖注入失败问题
针对你遇到的javax.enterprise.inject.UnsatisfiedResolutionException,结合你已确认生成类带有@ApplicationScoped注解的情况,按以下步骤排查解决:
1. 显式配置Maven注解处理器路径
Quarkus开发模式对注解处理器的依赖处理有特殊要求,仅将mapstruct-processor设为provided可能导致处理器未被正确触发。在pom.xml的build/plugins节点下添加maven-compiler-plugin配置,显式指定注解处理器路径:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> </path> <path> <groupId>io.quarkus</groupId> <artifactId>quarkus-extension-processor</artifactId> <version>${quarkus.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
确保${maven-compiler-plugin.version}和${quarkus.version}与项目使用的版本一致。
2. 清理并重新编译项目
旧编译产物可能导致CDI容器无法识别新生成的Mapper实现,执行以下命令彻底清理后重启:
./mvnw clean compile quarkus:dev
3. 验证MapStruct与Quarkus版本兼容性
确保两者版本匹配:
- Quarkus 3.x 推荐使用MapStruct 1.5.5.Final及以上版本
- Quarkus 2.x 可使用MapStruct 1.4.x或1.5.x版本
若版本不匹配,更新pom.xml中的${mapstruct.version}至兼容版本。
4. 确认CDI包扫描范围
检查项目是否自定义了CDI扫描范围,确保Mapper接口所在的org.acme.dto.mapper包被包含。Quarkus默认扫描org.acme及其子包,如有自定义配置需调整。
5. 检查Mapper实现类生成状态
重新编译后,确认target/generated-sources/annotations下的生成类:
- 类名应为
BookMapperImpl、AuthorMapperImpl等格式 - 类上带有
@ApplicationScoped注解 - 正确实现了对应Mapper接口的方法
若生成类不符合预期,需检查@Mapper注解的componentModel = "cdi"配置是否无误。
内容的提问来源于stack exchange,提问作者freestar
相关产品推荐
相关产品推荐

