即使它应该在类路径上,也找不到类

时间:2012-05-03 17:01:03

标签: java spring tomcat maven noclassdeffounderror

当我关闭在Tomcat上运行的war时,我收到此错误:

[2012-05-03 11:55:36,082] ERROR - org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(501) | Destroy method on bean with name 'threadPoolTaskExecutor' threw an exception
java.lang.NoClassDefFoundError: org/springframework/orm/jpa/EntityManagerFactoryUtils
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessBeforeDestruction(PersistenceAnnotationBeanPostProcessor.java:357)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:193)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:498)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:474)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:442)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1066)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1040)
    at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:958)
Caused by: java.lang.ClassNotFoundException: org.springframework.orm.jpa.EntityManagerFactoryUtils
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    ... 8 more

在我的pom.xml中,我将spring-orm 3.1.1.RELEASE作为依赖项。更奇怪的是,我可以进入PersistenceAnnotationBeanPostProcessor类,它是一个spring-orm 3.1.1.RELEASE类,但它找不到同一个jar中的EntityManagerFactoryUtils类。我猜它必须与抽象或静态有关,但我不确定调查此问题的进一步方向。它看起来应该是可用的。

有人想过为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

确实,这可能是一个排除问题(尝试调用mvn依赖:树来解决这个问题)。

你在战争中有罐子吗?你在Tomcat库中有另一个Spring jar吗?这可能是一个类加载器问题。

答案 1 :(得分:0)

我通过删除其中一个maven模块中的冗余依赖项解决了同样的问题。 我有直接依赖和间接通过其他模块,这导致了这种行为。