You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:48:03