Spring Batch集成Kafka触发ClassNotFoundException: com.google.common.cache.CacheLoader,需补充什么依赖?
Spring Batch集成Kafka触发ClassNotFoundException: com.google.common.cache.CacheLoader,需补充什么依赖?
嗨,我来帮你搞定这个问题!
你遇到的ClassNotFoundException: com.google.common.cache.CacheLoader原因很明确——这个类属于Google Guava库,但你的项目里现在只把Guava当成了测试依赖,运行时根本找不到它。
问题根源
看你提供的pom.xml,Guava的依赖配置是这样的:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> <scope>test</scope> </dependency>
<scope>test</scope>意味着这个库只会在单元测试阶段生效,而你的Spring Batch任务是在web应用运行时触发的(不管是本地还是OpenShift环境),自然会找不到这个类。至于另一个CronJob模块能正常运行,大概率是那个模块里Guava的依赖没有加test scope,运行时能正常访问到。
解决方法
把Guava依赖的<scope>test</scope>去掉,让它成为编译/运行时可用的依赖就行。另外,因为你用了Spring Boot Parent(3.1.4版本),建议直接用Spring Boot依赖管理的版本,避免版本兼容问题:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <!-- 去掉test scope,默认就是compile scope,运行时可用 --> <!-- 不需要手动指定版本,Spring Boot Parent会帮你管理兼容的版本 --> </dependency>
如果因为某些原因必须指定版本,Spring Boot 3.1.x对应的兼容Guava版本是31.1-jre,你可以手动加上<version>31.1-jre</version>。
验证步骤
- 修改pom.xml后,执行
mvn clean install重新构建项目 - 本地启动应用测试,或者重新部署到OpenShift
- 触发Spring Batch任务,应该就不会再出现这个ClassNotFoundException了
备注:内容来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

