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
相关产品推荐
相关产品推荐

