当前位置: 首页 > article >正文

解决NoClassDefFoundError:org/springframework/aot/AotDetector错误的一个方案

目录

错误分析

解决方案


今天在启动SpringBoot工程时出现了这样一个错误,这个错误导致我SpringBoot应用启动失败:

详细信息如下: 


java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector
	at org.mybatis.spring.mapper.ClassPathMapperScanner.<init>(ClassPathMapperScanner.java:95)
	at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:387)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:142)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:756)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:572)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
	at com.easygpt.RunEasyGptApplication.main(RunEasyGptApplication.java:9)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50)
Caused by: java.lang.ClassNotFoundException: org.springframework.aot.AotDetector
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	... 18 common frames omitted

 这是一个java.lang.NoClassDefFoundError错误,它表示在运行时找不到类org.springframework.aot.AotDetector

错误分析

  • NoClassDefFoundError:当Java虚拟机在加载类时找不到该类的定义时,会抛出此错误。这通常是由于类路径中缺少必要的库或版本不匹配引起的。

  • org.springframework.aot.AotDetector: 这是Spring Framework中的一个类,属于Spring AOT(Ahead-of-Time)处理的一部分。从Spring Framework 6.x版本开始,引入了AOT支持,包括AotDetector类。

  • 堆栈跟踪显示:错误发生在ClassPathMapperScanner的初始化过程中,而该类属于 MyBatis-Spring 集成部分。这意味着 MyBatis-Spring 正在尝试使用Spring Framework中的某个不存在的类。

  • 可能的原因:

    • 依赖版本不兼容:

      • MyBatis-Spring版本与Spring Framework版本不匹配。
      • 使用了需要Spring Framework 6.x的MyBatis-Spring 3.x,但项目依赖于Spring Framework 5.x。
    • 缺少依赖库:

      • 项目中缺少spring-aot相关依赖。

解决方案

  • 步骤一:检查依赖版本

    • 查看Spring Boot和Spring Framework的版本:

      • pom.xml中找到spring-boot-starter-parent的版本。
      • 说明Spring Boot 2.x对应Spring Framework 5.x,Spring Boot 3.x对应Spring Framework 6.x。
    • 查看MyBatis-Spring的版本:

      • pom.xml中找到mybatis-spring-boot-starter的版本。
      • 指出MyBatis-Spring 3.x需要Spring Framework 6.x支持。
  • 步骤二:统一依赖版本

    • 方案一:降级mybatis-spring-boot-starter版本

      • mybatis-spring-boot-starter版本降级到2.3.x,以适配Spring Framework 5.x。
      • <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>

        降低mybatis-spring-boot-starter版本到2.x并重新启动,这个方案可行,最终成功解决了问题。

                       

                      

  • 方案二:升级Spring Boot和Spring Framework版本

    • 将Spring Boot升级到3.x版本,同时使用Java 17或更高版本。
    • 示例修改:
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>3.1.4</version>
      </parent>
      <properties>
          <java.version>17</java.version>
      </properties>
    • 注意事项:
      • 升级后需要检查其他依赖的兼容性。
      • 可能需要修改代码以适应新的版本特性。
    • 步骤三:清理并重新构建项目
      • 执行命令:
        mvn clean install
      • 目的:
        • 清除旧的构建产物,确保新的依赖生效。

    http://www.kler.cn/a/555498.html

    相关文章:

  • 【大语言模型_4】源码编译vllm框架cpu版
  • Git LFS介绍(Large File Storage)大文件扩展,将大文件存储在外部存储,仓库中只记录文件的元数据(大文件的指针,类似一个小的占位符文件)
  • 【设计模式精讲】创建型模式之单例模式(饿汉式、懒汉式、双重校验、静态内部类、枚举)
  • Linux系统编程基础详解
  • 阿里云百炼通义大模型
  • C++ Primer 库-IO类
  • 用大内存主机下载Visual Studio
  • 淘宝/天猫店铺订单数据导出、销售报表设计与数据分析指南
  • 了解ffmpeg,安装并配置环境变量
  • 银河麒麟系统安装mysql5.7【亲测可行】
  • Java——链表(LinkedList)
  • style.cssText用法
  • 基于微信小程序的宠物寄养平台的设计与实现(ssm论文源码调试讲解)
  • 三甲医院网络架构与安全建设实战
  • 基于Kubernetes部署Owncloud个人网盘
  • UE引擎游戏加固方案解析
  • 零风险把数据盘挂载给根分区,给生产环境服务器扩容
  • vue计算属性与侦听器的区别
  • 基于Flask的京东商品信息可视化分析系统的设计与实现
  • 分布式 IO 模块:水力发电设备高效控制的关键