【问题标题】:Caused by: java.lang.NoClassDefFoundError: org/springframework/cache/support/AbstractCacheManager引起:java.lang.NoClassDefFoundError: org/springframework/cache/support/AbstractCacheManager
【发布时间】:2015-01-10 11:17:45
【问题描述】:

大家好,我尝试将 ehcache 包含到我的 spring 项目中并收到此错误

引起:java.lang.NoClassDefFoundError: org/springframework/cache/support/AbstractCacheManager 在 java.lang.ClassLoader.defineClass1(本机方法)在 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:71) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 在 java.lang.ClassLoader.defineClass1(Native Method) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:71) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 在 org.springframework.util.ClassUtils.forName(ClassUtils.java:257) 在 org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1271) 在 org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1242) ... 37 更多原因:java.lang.ClassNotFoundException: org.springframework.cache.support.AbstractCacheManager 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) ... 65 更多

这是我的 ehcache 豆

    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:config/ehcache.xml"/>
    <property name="shared" value="true"/>
    </bean>

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager" ref="ehcache"/>
    </bean>

这是我的依赖,在这种情况下可能有价值

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>3.2.13.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.7.4</version>
    </dependency>

我的依赖项/bean 声明有什么问题? 我找到了 AbstractCacheManager 类,但那是在非 Spring Maven 依赖项中。

【问题讨论】:

  • 对于初学者缓存仅从 Spring 3.1 开始可用,并且您正在混合使用 Spring 版本(3.0 和 3.2)。我建议将所有版本都移到 3.2.13.RELEASE 而不是混合(这总是一个非常糟糕的主意,并且会导致难以调试的问题)。

标签: spring maven ehcache


【解决方案1】:

打开项目属性 > 部署程序集并添加 maven 依赖项。

【讨论】:

    【解决方案2】:

    AbstractCacheManager 类不是 spring 3.0.5 版本的一部分。

    第一次出现在 Maven Central 是 3.1.0 版本:

    spring documentation证实了这一点:

    从 3.1 版本开始,Spring Framework 提供了对透明的支持 将缓存添加到现有的 Spring 应用程序中......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-15
      • 2015-05-01
      • 2016-11-25
      • 1970-01-01
      • 2020-09-30
      • 2019-12-16
      • 2013-04-06
      • 2015-04-22
      相关资源
      最近更新 更多