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

Spring Boot3升级后MapStruct生成文件含javax依赖问题

问题描述

把REST服务升级到Spring Boot 3后,已经手动把所有javax导入替换成了jakarta,但Maven打包时发现MapStruct生成的NotificationMapperImpl类里还带着javax.annotation.processing.Generated的导入。本地用Insomnia调用接口没问题,但IntelliJ IDEA里一直报javax.management.InstanceNotFoundException: orh.springframework.boot:type=Endpoint,name=Mappings,*的错误。试过硬写MapStruct版本(当前用的1.5.5.Final)没用,找不到这个javax依赖的来源,怕上线出问题,求解决办法。

解决方案

1. 让MapStruct生成Jakarta版本的Generated注解

MapStruct 1.5.x支持通过编译参数指定生成类用的Generated注解全类名,直接在Maven编译器插件的compilerArgs里加一行配置:

<compilerArg>-Amapstruct.generatedAnnotation=jakarta.annotation.Generated</compilerArg>

这样生成的Mapper实现类就会自动引用jakarta.annotation.Generated,不会再出现javax的导入。

2. 升级Maven Compiler Plugin版本

你现在用的maven-compiler-plugin 3.8.1对Java 17和Jakarta的支持不够好,建议升级到3.11.0及以上版本,确保编译过程能正确处理Jakarta相关的注解:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <!-- 其他原有配置保留 -->
</plugin>

3. 排查父POM的传递依赖

虽然改不了父POM,但可以用Maven命令查一下是不是有依赖偷偷引入了javax.annotation的包:

mvn dependency:tree | grep javax.annotation

如果查到有这类传递依赖,直接在自己的POM里把它排除掉:

<dependency>
    <!-- 这里填查到的有问题的依赖 -->
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 修复IDEA里的Mappings端点错误

IDEA的这个错误大概率是缓存或者Actuator端点配置的问题,试试这两步:

  • 先执行mvn clean install,然后重启IDEA清缓存
  • 检查项目的application.properties或application.yml,如果用了Actuator,确保mappings端点的配置是对的:
management.endpoints.web.exposure.include=mappings
调整后的Maven编译器插件完整配置
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${org.projectlombok.lombok.version}</version>
            </path>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org.mapstruct.mapstruct.version}</version>
            </path>
        </annotationProcessorPaths>
        <compilerArgs>
            <compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
            <compilerArg>-Amapstruct.generatedAnnotation=jakarta.annotation.Generated</compilerArg>
        </compilerArgs>
    </configuration>
</plugin>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:07:11