cannot access net.sf.ehcache.CacheManager, class file for net.sf.ehcache.CacheManager not found
Ehcache 2 is in the net.sf.ehcache
package. Most tutorial are about it since it had a long and useful life. Ehcache 3, the version you configured, is quite new (but of course better) and in the org.ehcache
package.
The package moved because having its own domain was nicer but also because the new version is quite different and be able to cohabit with the old version can be necessary (because of some framework using it).
Your error comes from the fact that EhCacheCacheManager
is using Ehcache 2. Ehcache 3 doesn't need it because it is JCache compliant. So you can use JCacheCacheManager
instead.
So, right now, you have the Spring wiring and an ehcache.xml
for Ehcache 2. And a dependency to Ehcache 3. You should align them to fix your problem.
To use Ehcache 3, the easiest is to add this in your application.properties
spring.cache.jcache.config=ehcache.xml
And this:
@EnableCaching
@Configuration
public class CacheConfig {
}
And that's it.
![vigamage](https://i.stack.imgur.com/BkUb1.jpg?s=256&g=1)
vigamage
Updated on July 30, 2022Comments
-
vigamage almost 2 years
I have been implementing some caching in my project using
EhCache
. I have added following dependencies to my pom.xml<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.8.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.8.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.ehcache/ehcache --> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.3.1</version> </dependency>
Note the third dependency which is for
EhCache
. In all the tutorials I found online, the group id is different. The reason for me to change the group id was it had been moved toorg.ehcache
.I have the following ehcache.xml file in my classpath.
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true"> <diskStore path="java.io.tmpdir"/> <cache name="cardTypes" maxEntriesLocalHeap="100" maxEntriesLocalDisk="1000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" transactionalMode="off"> <persistence strategy="localTempSwap"/> </cache> </ehcache>
Following is my configuration file.
import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import org.springframework.beans.factory.FactoryBean; import org.springframework.cache.CacheManager; import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; import org.springframework.core.io.ClassPathResource; @EnableCaching @Configuration public class CacheConfig { @Bean public CacheManager cacheManager() { return new EhCacheCacheManager(ehCacheCacheManager().getObject()); } @Bean public EhCacheManagerFactoryBean ehCacheCacheManager() { EhCacheManagerFactoryBean factory = new EhCacheManagerFactoryBean(); factory.setConfigLocation(new ClassPathResource("ehcache.xml")); factory.setShared(true); return factory; } }
Now, I am getting an error in following line.
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
That is:
In Eclipse:-
The type net.sf.ehcache.CacheManager cannot be resolved. It is indirectly referenced from required .class files
In JIdea:
Error:(21, 71) java: cannot access net.sf.ehcache.CacheManager class file for net.sf.ehcache.CacheManager not found
I have not added any net.sf.ehcache stuff into my project. As I mentioned before, the
ehcache
has been moved toorg.ehcache
.Why I am getting this error? It is related to
net.sf.ehcache
which is not a part of the dependencies I have added.Should I code the second bean in a different way since the artifact has been moved? or how can I get this resolved?
-
vigamage about 7 yearsThank you very much. After trying several things, the solution I came up with was using the old Ehcache 2. That solved the issue. However, this is also a solution. I am accepting this. :)
-
Henri about 7 yearsthanks ;-) As I said, moving the dependency to ehcache 2 also works of course :-)
-
Aliya over 5 yearsThanks! I found an example code with ehcache 2 that works: github.com/TechPrimers/spring-ehcache-example/blob/master/src/…