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

SpringBoot项目中Maven/Mapstruct在资源目录生成错误注解文件夹

解决MapStruct注解处理器生成路径异常与类重复问题

1. 强制指定注解处理器输出目录

你的问题核心是MapStruct生成路径被resources配置干扰,需要在pom.xml里明确约束注解处理器的输出位置,覆盖默认行为。在<build>标签下添加以下插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.12.1</version>
    <configuration>
        <source>17</source> <!-- Spring Boot 3.x要求JDK 17+,按需匹配你的版本 -->
        <target>17</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.5.5.Final</version> <!-- 选择兼容Spring Boot 3的MapStruct版本 -->
            </path>
            <!-- 若使用Lombok,必须添加以下依赖避免冲突 -->
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.30</version>
            </path>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-mapstruct-binding</artifactId>
                <version>0.2.0</version>
            </path>
        </annotationProcessorPaths>
        <!-- 强制生成到标准目录,不受resources配置影响 -->
        <generatedSourcesDirectory>${project.build.directory}/generated-sources/annotations</generatedSourcesDirectory>
    </configuration>
</plugin>

2. 修正Resources配置的范围

检查pom.xml里的<resources>节点,确保它只处理真正的资源文件,不要涉及注解处理器的生成目录。示例配置如下:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.yml</include>
            <include>**/*.xml</include>
        </includes>
    </resource>
    <!-- 自定义资源目录仅处理指定类型文件,避免误包含生成类 -->
    <resource>
        <directory>../configurations/DAOSchema</directory>
        <includes>
            <include>**/*.sql</include> <!-- 按需调整为该目录下的实际资源类型 -->
        </includes>
        <filtering>false</filtering>
    </resource>
</resources>

3. 清理残留构建产物与IDE缓存

  • 执行Maven清理命令:mvn clean,彻底删除旧的target目录内容
  • 在IntelliJ IDEA中执行File -> Invalidate Caches...,选择Invalidate and Restart,清除IDE缓存避免旧文件残留

4. 解决类路径重复问题

重复类通常是生成文件被多次打包导致,按以下步骤处理:

  • 右键target/generated-sources/annotations目录,选择Mark Directory as -> Generated Sources Root,让IDE识别为源码目录,避免重复打包
  • 添加maven-clean-plugin配置,确保每次构建前彻底清理生成目录:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.3.2</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${project.build.directory}/generated-sources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </fileset>
        </filesets>
    </configuration>
</plugin>
  • 检查maven-resources-plugin配置,确保它没有把生成的Java类复制到target/classes或其他打包目录

5. 验证IDEA运行配置

在运行配置的Before launch部分,只保留Build(或Maven: compile)步骤,避免额外的资源复制操作干扰注解处理器的生成流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:43