Spring6整合Ehcache3遇javax类找不到错误,已引Jakarta依赖求解答
问题描述
基于Spring 6、Ehcache 3、JDK 17的项目中,参考Spring 4兼容Ehcache 3的配置方案,配置如下:
<bean id="ehcache" class="org.springframework.cache.jcache.JCacheManagerFactoryBean"> <property name="cacheManagerUri" value="classpath:ehcache.xml"/> </bean>
执行时出现如下错误,已引入jakarta.xml.bind-api依赖,但仍提示找不到javax相关类:
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/ValidationEventHandler at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:116) at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:92) at org.ehcache.jsr107.EhcacheCachingProvider$ConfigSupplier.getConfiguration(EhcacheCachingProvider.java:328) at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:134) at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:85) at org.springframework.cache.jcache.JCacheManagerFactoryBean.afterPropertiesSet(JCacheManagerFactoryBean.java:83) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1817) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
解决方案
升级Ehcache版本到适配Jakarta的版本
Spring 6基于Jakarta EE 9+规范,旧版本Ehcache 3仍依赖javax命名空间的API。需使用Ehcache 3.10及以上版本,这些版本已完成Jakarta API迁移,不再依赖javax.xml.bind相关类。调整Maven依赖
更新pom.xml中的Ehcache依赖至最新稳定版,示例:<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.10.8</version> <!-- 可替换为更高稳定版 --> </dependency>无需额外引入
javax.xml.bind相关依赖,新版Ehcache会自动依赖Jakarta版本的XML绑定API。验证配置兼容性
Spring 6的JCacheManagerFactoryBean配置本身无需修改,但需确保ehcache.xml的语法符合当前Ehcache版本要求,避免因配置文件语法过时引发其他问题。
内容的提问来源于stack exchange,提问作者cs_zineb
相关产品推荐
相关产品推荐

