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

MapStruct指定jakarta-cdi组件模型失效,依赖注入失败求助

解决MapStruct Jakarta CDI组件模型不生效问题

核心问题定位

MapStruct 1.5.x系列已原生支持jakarta-cdi组件模型,但你遇到的编译器识别为default、@Inject注入失败的问题,大概率是API与注解处理器依赖版本不匹配,或构建插件未正确配置,导致处理器未生成带Jakarta CDI注解的实现类。

具体修复步骤

1. 强制保证MapStruct依赖版本一致

必须确保mapstruct(API)和mapstruct-processor(注解处理器)的版本完全相同,避免版本差异导致处理器无法识别jakarta-cdi配置:

<!-- Maven 示例 -->
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.5.5.Final</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.5.5.Final</version>
    <scope>provided</scope>
</dependency>
// Gradle 示例
dependencies {
    implementation 'org.mapstruct:mapstruct:1.5.5.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}

2. 正确配置构建插件(关键)

如果使用Maven的maven-compiler-plugin,需明确指定注解处理器路径,确保MapStruct处理器被优先调用:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version> <!-- 建议使用3.8.1及以上版本 -->
    <configuration>
        <source>17</source> <!-- 匹配项目使用的JDK版本 -->
        <target>17</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.5.5.Final</version>
            </path>
            <!-- 若项目使用Lombok等其他注解处理器,需一并添加到此路径下 -->
        </annotationProcessorPaths>
    </configuration>
</plugin>

3. 验证生成的实现类

编译后查看target/generated-sources/annotations(Maven)或build/generated/sources/annotationProcessor/main(Gradle)下的Mapper实现类,确认类上是否自动生成了@jakarta.enterprise.context.ApplicationScoped注解。若未生成,说明处理器未生效,需重新检查上述配置。

4. 版本调整备选方案

若上述配置都正确仍有问题,可尝试升级到MapStruct 1.5.6.Final(修复了部分Jakarta CDI相关的边缘场景bug);同时确保项目使用的Jakarta EE版本为9+(与MapStruct 1.5.x的Jakarta支持兼容)。

额外注意事项

  • 无需在Mapper接口上手动添加@ApplicationScoped,jakarta-cdi模型下MapStruct处理器会自动为实现类注入该注解
  • 构造函数注入正常是因为default模型生成的实现类带无参构造,容器可直接实例化,但不属于CDI托管bean,因此@Inject会触发依赖不满足错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:01:02