springboot + mybatis plus + MapStruct,MapStruct启动报错问题的一些个人解决方式
·
报错如下:
2026-05-13T10:43:03.817+08:00 WARN 13404 --- [mini-user] [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'miniUserController' defined in file [D:\MyProject\security-damo\mini-user\target\classes\com\cyp\user\controller\MiniUserController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'miniUserServiceImpl' defined in file [D:\MyProject\security-damo\mini-user\target\classes\com\cyp\user\service\impl\MiniUserServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'com.cyp.user.service.converter.MiniUserConverter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2026-05-13T10:43:03.817+08:00 INFO 13404 --- [mini-user] [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ...
2026-05-13T10:43:03.828+08:00 INFO 13404 --- [mini-user] [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
2026-05-13T10:43:03.830+08:00 INFO 13404 --- [mini-user] [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2026-05-13T10:43:03.864+08:00 ERROR 13404 --- [mini-user] [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 1 of constructor in com.cyp.user.service.impl.MiniUserServiceImpl required a bean of type 'com.cyp.user.service.converter.MiniUserConverter' that could not be found.
Action:
Consider defining a bean of type 'com.cyp.user.service.converter.MiniUserConverter' in your configuration.
注意每次排查需要进行maven clean compile的清除、编译
开始排查:
一:查看MapStruct 到底有没有生成实现类
找到项目编译输出目录(通常是 target/)
如果没有,在pom.xml添加插件
<build>
<plugins>
<!-- 将生成的源码目录添加为源码根 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<id>add-generated-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/annotations</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source> <!-- 根据你项目的 Java 版本调整 -->
<target>17</target>
<annotationProcessorPaths>
<!-- MapStruct 定义库 -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</path>
<!-- Lombok 处理器(必须在前) -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<!-- MapStruct 处理器(必须在 Lombok 之后) -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</build>
二:追踪 Spring 扫描
在启动类添加Converter打印信息,如果打印结果为空,则必然有某种排除机制
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MiniUserApplication.class, args);
System.out.println("==== Beans of type MiniUserConverter ====");
String[] names = context.getBeanNamesForType(MiniUserConverter.class);
for (String name : names) {
System.out.println(name);
}
System.out.println("==== All beans containing 'Converter' ====");
for (String name : context.getBeanDefinitionNames()) {
if (name.toLowerCase().contains("converter")) {
System.out.println(name + " -> " + context.getBean(name).getClass().getName());
}
}
}
经过详细排查,发现以下都没问题:
- 生成的文件正常:
源文件:mini-user/target/generated-sources/annotations/com/cyp/user/service/converter/MiniUserConverterImpl.java
class 文件:mini-user/target/classes/com/cyp/user/service/converter/MiniUserConverterImpl.class - Maven 构建配置正确:
pom.xml 中正确配置了 MapStruct 处理器
build-helper-maven-plugin 正确添加了生成源码目录
annotationProcessorPaths 正确配置了 Lombok 和 MapStruct 的顺序 - MapStruct 配置正确:
MiniUserConverter 接口使用了 @Mapper(componentModel = “spring”)
生成的 MiniUserConverterImpl 类包含了 @Component 注解
编译和打包都成功完成
根本原因:
可能IDEA环境配置问题_,而不是代码或配置问题。原因如下:
- Maven命令行编译打包都成功
- 生成的class文件存在于正确的位置
- IDEA可能没有正确识别
target/generated-sources/annotations作为源代码目录 - IDEA的缓存可能导致它看不到新生成的类
解决方案:
- 清理IDEA缓存(推荐这个方案,本人是通过这个解决的)
- 在IDEA中:File -> Invalidate Caches(使缓存失效)
- 选择 “Invalidate and Restart” (失效并重启 R)
- 等待IDEA重新索引项目
- maven clean compile
- 重新运行应用
- 重新导入Maven项目
- 关闭IDEA中的项目
- 删除 .idea 目录(如果需要)
- 在IDEA中重新打开项目
- Maven工具栏 -> Reload project
- 手动标记源代码目录
- 打开 Project Structure (Ctrl+Alt+Shift+S)
- 选择 Modules -> mini-user
- 找到 target/generated-sources/annotations
- 右键 -> Mark as -> Sources
- 点击OK应用
更多推荐

所有评论(0)