问题描述:原始苍穹外卖工程直接运行启动类后提示:Cannot instantiate interface org.springframework.context.ApplicationContextInitializer : org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer
原因;依赖冲突或者springboot升级问题。
解决方法:在sky-server的pom中删掉自动配置的依赖spring-boot-autoconfigure
解决过程,
因为一开始没有找打根本原因也走了很多弯路
先解决依赖冲突
进入Build Output发现具体报错如下:java: 程序包org.apache.ibatis.annotations不存在。发现这是真正的问题所在
- **原因:** 缺少项目的.iml文件。(https://blog.csdn.net/weixin_42443980/article/details/105111734?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105111734-blog-103882007.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105111734-blog-103882007.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=2)
- **问题解决:** 重新生成该项目的.iml文件(https://blog.csdn.net/helloearth121/article/details/118168244)
mvn idea:module
- 但是??!又出现问题了 ,查询发现是依赖问题,于是更改Idea设置(https://blog.csdn.net/weixin_43645603/article/details/108392208)
- 佛了,继续出现问题,可能因为网络不好,jar包没有下载下来。依次双击运行父项目的maven clean、maven install命令解决(https://blog.csdn.net/xiaoyi1212/article/details/130995714)
- 不出所料,继续出现问题,又回到最初的起点,build不报错了,run界面还是那个错误Cannot instantiate interface org.springframework.context.ApplicationContextInitializer
只好找gpt询问,说是由于Spring Boot版本不兼容导致的,可能是项目中的Spring Boot依赖版本与其他依赖项不匹配。
先按照mvn dependency:tree执行后发现正常,然后通过Maven打开sky-server依赖树发现了spring-boot-autoconfigure依赖存在冲突
于是安装maven helper插件来检查依赖冲突(https://blog.csdn.net/kingwinstar/article/details/106916140)
找到冲突的依赖后到sky-service模块的pom.xml文件中解决spring-boot-autoconfigure冲突
<!-- 版本锁定 解决依赖冲突-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>3.2.2</version>
</dependency>
</dependencies>
</dependencyManagement>
然后继续找到knife4j-annotation冲突发生在sky-pojo模块中,找到模块对应的pom文件修改版本锁定
- 依赖冲突解决完后,运行启动类,仍然报错!!!???
显式指定 swagger-annotations 的版本后终于解决所有依赖冲突,运行 mvn clean install 来重新构建项目,并未成功
然后定位到报错处根据idea提示加入某某依赖到类路径
继续输入mvn clean install 来重新构建项目终于重建成功
但运行时还是初始错误,最后没办法划拉到最下面的报错信息:java.lang.ClassNotFoundException: org.springframework.beans.factory.aot.BeanRegistrationExcludeFilter,这个类是 Spring Framework 5.3 及更高版本中引入的,主要用于 Spring 的 Ahead-Of-Time (AOT) 编译过程中,帮助过滤不需要注册的 beans。还找不到这个类说明项目中有多个版本的 Spring Boot 或 Spring Framework 的依赖,且有些依赖比5.3要低
终于找到了解决方法!! **在sky-server的pom中删掉自动配置的依赖spring-boot-autoconfigure** ,但是不知道为啥呀(https://blog.csdn.net/weixin_72186894/article/details/132050523)