Spark3.1.1+Scala2.12环境下scalatest测试报jackson-databind版本不匹配错误
Spark Scala测试jackson版本不匹配解决方案
问题核心
当前错误是由于项目依赖树中存在多版本jackson组件冲突,且spark-testing-base版本与使用的Spark 3.1.1不兼容,同时依赖排除规则不完整导致强制版本策略未生效。
永久修复步骤
1. 对齐spark-testing-base版本
你当前使用的com.holdenkarau:spark-testing-base_2.12:3.0.1_1.1.0适配Spark 3.0.1,与Spark 3.1.1不匹配,替换为对应版本并全量排除jackson相关依赖:
testImplementation("com.holdenkarau:spark-testing-base_2.12:3.1.1_1.1.0"){ exclude group: 'org.apache.xbean', module: 'xbean-asm6' // 排除自带的所有jackson组件 exclude group: 'com.fasterxml.jackson.core' exclude group: 'com.fasterxml.jackson.module' exclude group: 'com.fasterxml.jackson.jaxrs' }
2. 补全scalatest的依赖排除
之前仅排除了jackson-databind,需全量排除所有jackson组件:
testImplementation("org.scalatest:scalatest_2.12:3.0.4") { exclude group: 'com.fasterxml.jackson.core' exclude group: 'com.fasterxml.jackson.module' exclude group: 'com.fasterxml.jackson.jaxrs' }
如果项目引入了spark-cassandra-connector,也需要添加同样的jackson排除规则。
3. 调整强制版本策略生效范围
限定强制版本仅对测试配置生效,避免影响生产打包逻辑:
configurations.testImplementation { resolutionStrategy { force "com.fasterxml.jackson.module:jackson-module-scala_2.12:2.12.4" force "com.fasterxml.jackson.core:jackson-databind:2.12.4" force "com.fasterxml.jackson.core:jackson-core:2.12.4" force "com.fasterxml.jackson.core:jackson-annotations:2.12.4" force "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.12.4" force "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.12.4" force "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.12.4" force "org.scalatest:scalatest_2.12:3.0.4" } }
4. 清理缓存重新构建
执行命令清理本地依赖缓存并重新拉取:
./gradlew clean build --refresh-dependencies
IDEA环境下还需要刷新Gradle项目,执行File → Invalidate Caches清空本地缓存后重启IDE,再运行测试。
临时快速解决方案
如果测试不需要使用Spark UI,可直接在初始化SparkConf时禁用UI绕开jackson加载逻辑,无需修改任何依赖配置:
val conf = new SparkConf() .setMaster("local[2]") .set("spark.ui.enabled", "false")
冲突验证方法
执行以下命令打印测试依赖树,排查是否存在其他版本的jackson组件:
./gradlew dependencies --configuration testImplementation | grep jackson
确认输出中所有jackson相关组件版本均为2.12.4即可。
内容的提问来源于stack exchange,提问作者vamsi
相关产品推荐
相关产品推荐

