java.lang.NoClassDefFoundError:net / sf / ehcache / concurrent / ReadWriteLockSync

时间:2018-09-27 04:20:00

标签: java spring-boot spring-data-jpa spring-cache

我有一个运行java8的SpringBoot应用程序。它运行良好,但有时会开始引发以下错误。

java.lang.NoClassDefFoundError: net/sf/ehcache/concurrent/ReadWriteLockSync
at net.sf.ehcache.store.MemoryStore$LockProvider.getSyncForKey(MemoryStore.java:1038)
at net.sf.ehcache.Cache.tryRemoveImmediately(Cache.java:2170)
at net.sf.ehcache.Cache.get(Cache.java:1756)
at org.springframework.cache.ehcache.EhCacheCache.lookup(EhCacheCache.java:142)
at org.springframework.cache.ehcache.EhCacheCache.get(EhCacheCache.java:67)
at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:73)
at org.springframework.cache.interceptor.CacheAspectSupport.findInCaches(CacheAspectSupport.java:527)
at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:492)
at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:374)
at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:316)
at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

EhCache在版本2和版本3之间更改了程序包名称。

net.sf.ehcache指的是EhCache2中的软件包(您的应用程序正在尝试查找此版本)

org.ehcache指的是新的EhCache3

可能是您有使用EhCache2的代码,现在已经失去了依赖性。例如,如果您尝试将Spring Boot 1.5更新为Spring Boot 2

,就会发生这种情况

要进行进一步的测试,请尝试在您的pom.xml中使用以下依赖项来强制EhCache2:

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

答案 1 :(得分:0)

NoClassDefFoundError发生在类在编译时可用并且程序已成功编译并链接但在运行时类丢失时。

可能的解决方案:

在这里,您使用的是EhCache,因此您可能对此具有一些依赖性。将EhCache jar从存储库复制到您的项目文件夹(可以是您可以添加到lib的{​​{1}}文件夹)。现在,您显式地提供了build path文件,因此您可以注释相应的依赖项或提供其范围。

现在,您可以尝试看看是否再次收到错误消息。 :)