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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 问题

    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/asm/ClassVisitor` 的错误时,这通常意味着 JVM 或 ClassLoader 尝试加载指定的类(这里是 `org.springframework.asm.ClassVisitor`),但在运行时刻无法找到该类定义。此类问题可能由多种原因引起。 #### 类路径配置不正确 如果项目依赖项未被正确引入到构建工具或IDE中的classpath,则可能会发生这种情况。确保所有必要的库都已添加至项目的 classpath 中[^1]。 #### 版本兼容性问题 不同版本之间的API变更可能导致某些类不再存在于预期位置。特别是对于Spring框架而言,在3.x系列迁移到4.x之后确实存在一些内部结构调整,这些变化影响到了ASM包的位置以及其集成方式[^2]。 ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> ``` 为了适应这种改变并修复上述提到的问题,建议采取如下措施: - **移除重复依赖**:检查pom.xml文件或其他形式的依赖管理清单,确认是否存在多个相同功能模块的不同版本共存的情况;如果有,请保留最新版并删除旧版本条目。 - **更新Spring核心组件**:由于Spring 4.x已经把ASM相关的内容打包进了`sprig-core`之中,因此无需单独下载额外jar包来满足此需求。只需保证所使用的Spring Core版本是最新的稳定发行版即可[^4]。 通过以上调整应该可以有效解决因缺少`org.springframework.asm.ClassVisitor`而导致的应用启动失败现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值