我有一个运行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)
任何帮助将不胜感激。
答案 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
文件,因此您可以注释相应的依赖项或提供其范围。
现在,您可以尝试看看是否再次收到错误消息。 :)