java.lang.NoClassDefFoundError: org/springframework/orm/hibernate3/support/HibernateDaoSupport

在整合Spring和Hibernate时遇到NoClassDefFoundError,原因是pom.xml中不同版本的Hibernate和Spring依赖导致的版本冲突。解决方法是选择单一版本并清理maven缓存,调整import路径,确保lib文件夹下包含正确jar包。

一、 问题

    Hibernate查询数据库编译通过,但运行时报错

    严重: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/web01]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1015)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:991)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1899)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: org/springframework/orm/hibernate3/support/HibernateDaoSupport
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3205)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:1373)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1861)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    at java.lang.Class.getDeclaredFields(Class.java:1916)
    at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
    at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:270)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:139)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:417)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:891)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5519)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 42 more
Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.support.HibernateDaoSupport
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
    ... 63 more

 

二、 原因

pom文件中使用了 Hibernate的不同版本的依赖,版本冲突

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.4.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.4.4.Final</version>
</dependency>
-----------------------------------------------------------
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-hibernate3</artifactId>
    <version>2.0.1</version>
</dependency>

上面org.hibernate 5.4.4.Final版本的依赖与下面org.springframework 2.0.1版本的依赖所起的功能是一致的,但如果同时加上的话就会产生冲突。要将其中的一个去掉。这里去掉5.4.4版本的。

 

去掉之后又产生了另一个问题:

部分引用找不到了

原因:

之前用的依赖是5.4.4.Final版本的部分, 

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.4.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.4.4.Final</version>
</dependency>

之后代码里要用到 HibernateDaoSupport  引入了org.springframework 2.0.1版本的依赖。 然后产生了版本冲突,去掉5.4.4.Final 之后,2.0.1版本的依赖Query包路径与原来5.4.4.Final的依赖Query包路径不一致,于是导致这个import找不到了

 

这里可以看它们之间的不同

 

三、解决方法

1. 上面两种依赖选择其中的一个版本, 选org.springframework 2.0.1版本的依赖。

2. 之后将maven包clean一下, 清除掉原来的包,去掉上面的import xxx, 然后引入新的import路径。

 

 

四、其他可能的原因

    所依赖的包都在maven下载了,编译也能够通过,但是运行的时候报错 

Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.support.HibernateDaoSupport

    这样的情况就说明不是缺少依赖包的问题,而是在运行的时候找不到包。 那就是没有把maven下载的包部署好。

 

  打开 Project Structure --> Artifacts-->Output Layout,查看Output Layout 中WEB-INF下有没有 lib文件夹。如果没有lib文件夹或者lib文件夹下没有jar包,都是没有部署好。 如果右边Available Elements窗口还显示有jar包,说明这些jar包未添加,则应右击选择Put into Output Root。

  参考致谢:

  https://www.jianshu.com/p/18d068f47b09   

 

 

 

 

 

 

### 解决 `java.lang.NoClassDefFoundError` 错误 当遇到 `java.lang.NoClassDefFoundError: org/springframework/aop/framework/AopProxyUtils` 这样的错误时,通常意味着应用程序在运行时无法找到指定的类文件。此类问题可能由多种原因引起。 #### 类路径配置不当 如果项目构建工具(如Maven或Gradle)未能正确解析依赖关系,则可能导致缺少必要的JAR包。确保项目的pom.xml或build.gradle文件中包含了正确的Spring AOP依赖项[^4]。 对于Maven项目,应该有如下依赖声明: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> ``` 其中 `${spring.version}` 应该替换为实际使用的Spring版本号。 #### 版本兼容性问题 不同版本之间的不匹配也可能引发此异常。特别是当使用较新的Spring Boot版本而其他组件仍停留在旧版时,可能会发生这种情况。建议保持所有Spring相关模块处于同一主要版本系列内[^5]。 例如,在POM文件中统一管理依赖版本可以有效防止这类冲突: ```xml <properties> <spring.version>5.3.10</spring.version> </properties> <dependencyManagement> <dependencies> <!-- 导入Spring Boot BOM --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.5.5</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 显式设置Spring核心库版本 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> ... </dependencies> </dependencyManagement> ``` #### 清理缓存并重新编译 有时本地仓库中的损坏文件也会造成加载失败。尝试清理IDE和构建工具的缓存,并执行一次完整的clean install操作来重建整个工程结构[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值