Spring Boot应用在IntelliJ IDEA中启动失败但在NetBeans、Eclipse中正常运行的问题求助
问题描述
将我的Spring Boot应用在NetBeans、Eclipse等IDE中运行正常,但在IntelliJ IDEA中启动时失败并抛出如下错误。我已尝试清理IntelliJ缓存并重启,但问题仍未解决,恳请各位帮忙排查,谢谢!
2021-12-29 19:05:22,824[main] ERROR [o.s.b.SpringApplication] Application run failed java.lang.IllegalArgumentException: Unable to instantiate factory class [org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor] for factory type [org.springframework.boot.env.EnvironmentPostProcessor] at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:168) at org.springframework.core.io.support.SpringFactoriesLoader.loadFactories(SpringFactoriesLoader.java:104) at org.springframework.boot.context.config.ConfigFileApplicationListener.loadPostProcessors(ConfigFileApplicationListener.java:205) at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:196) at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:188) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:80) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345) at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:206) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:117) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:74) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:80) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345) at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at com.fmr.amt.AmtCdsHoldingsEventsHandlerApplication.main(AmtCdsHoldingsEventsHandlerApplication.java:26) Caused by: java.lang.NoSuchMethodException: org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.<init>() at java.lang.Class.getConstructor0(Class.java:3082) at java.lang.Class.getDeclaredConstructor(Class.java:2178) at org.springframework.util.ReflectionUtils.accessibleConstructor(ReflectionUtils.java:185) at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:164) ... 27 common frames omitted Process finished with exit code 1
解决方案
这个错误的核心原因是Spring Boot与Spring Cloud版本不兼容,或者项目依赖存在冲突,导致ConfigDataEnvironmentPostProcessor类的无参构造方法无法被找到。结合你在其他IDE能正常运行的情况,大概率是IntelliJ的依赖缓存或版本解析问题,给你几个针对性的解决步骤:
优先检查Spring Boot与Spring Cloud版本匹配度
Spring Cloud的每个发行版都对应特定范围的Spring Boot版本,比如:- Spring Cloud 2020.0.x(Ilford)→ Spring Boot 2.4.x/2.5.x
- Spring Cloud Hoxton → Spring Boot 2.2.x/2.3.x
如果你的版本组合不在官方推荐范围内,很容易出现这类反射构造失败的问题。调整pom.xml或build.gradle里的版本号,确保二者兼容。
强制刷新并重新导入依赖
虽然你清理过IntelliJ缓存,但依赖本身可能有本地缓存的旧版本:- 用构建工具强制更新依赖:
- Maven:执行命令
mvn clean install -U - Gradle:执行命令
./gradlew clean build --refresh-dependencies
- Maven:执行命令
- 在IntelliJ中重新导入项目:
点击右侧Maven/Gradle面板的「Refresh」按钮,或者通过File → Project Structure → Modules重新关联项目依赖。
- 用构建工具强制更新依赖:
排查依赖冲突
有些第三方依赖可能会隐性引入低版本的Spring Boot核心包,导致版本冲突:- 用Maven命令
mvn dependency:tree或Gradle命令./gradlew dependencies生成依赖树 - 查找所有
spring-boot或spring-cloud相关的依赖,看是否有版本不一致的情况 - 如果发现冲突,在对应依赖的
<dependency>标签里添加<exclusions>排除掉不兼容的子依赖
- 用Maven命令
检查IntelliJ运行配置
确认你的Run/Debug配置没有问题:- 配置中的JDK版本和项目指定的JDK版本一致(比如项目用JDK8,就不要选JDK11)
- 「Use classpath of module」选择的是项目的主模块,而不是其他子模块
内容的提问来源于stack exchange,提问作者MHN
相关产品推荐
相关产品推荐

