2012-10-24 95 views
3

當我運行tomcat的戰爭部署,我得到: NoClassDefFoundError的:組織/阿帕奇/公/收藏/地圖/ LRUMapSpring + Hibernate的+ Tomcat的依賴問題

Invocation of init method failed; nested exception is 
java.lang.NoClassDefFoundError: 
org/apache/commons/collections/map/LRUMap 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE] 

什麼奇怪的是,我在我的WEB-INF lib文件夾中得到了commons-collections-2.1.jar(我什至試過3.1)。

編輯: 我沒有將commons-collectionsWEB-INF/lib複製到Tomcat lib,它似乎工作。但是我不能在生產服務器上這樣做,爲什麼不是我的WEB-INF/lib版本?

+0

可能是一個類加載器問題。 (Yuck!)祝你好運! –

+0

如果jar在tomcat/lib中工作,但不在WEB-INF/lib中,則可能需要重新進行適當的重新啓動。錯誤是NoClassDefFound,它與ClassNotFound不同。如上所述,類加載器可能會被別的東西(jar或類的另一個版本)所困惑。也許LRUMap也是tomcat-jar的一部分? – wemu

+1

看起來像一個使用org/apache/commons/collections/map/LRUMap的類,它由層次結構中比Webapp Class Loader更高的類加載器加載。請參閱 http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html。 – Potejciak

回答

3

好吧,所以我沒有把公用集合版本3.2.1和錯誤消失。不幸的是我仍然不知道哪個庫取決於這個版本。即使mvn dependency:tree沒有幫助...

+0

你可以發佈你的'pom.xml'和spring bean定義(相關部分) – mzzzzb

1

我有這個例外,當我與依賴關係xdoclet

如果您使用此依賴關係,只需排除它。

0

我有同樣的問題,也許批准答案爲時已晚,但對於未來會遇到這個問題的人來說,這仍然是有利的。 因此,我從net.sf.jasperreports中排除了commons-collections,之後,tomcat運行完美而沒有任何問題。

<dependency> 
    <groupId>net.sf.jasperreports</groupId> 
    <artifactId>jasperreports</artifactId> 
    <version>4.1.1</version> 
    <type>jar</type> 
    <scope>compile</scope> 
    <exclusions> 
     <exclusion> 
      <artifactId>commons-collections</artifactId> 
      <groupId>commons-collections</groupId> 
     </exclusion> 
    </exclusions> 
</dependency>