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

Spark单元测试调用parallelize报Jackson版本不兼容如何解决

你之前配置不生效的原因

  • 排除规则写在了testCompileOnly下的jersey依赖闭包中,但冲突的Jackson 2.9.7是从主依赖的dropwizard-core引入的,和jersey依赖没有关联,自然不会生效
  • Gradle的exclude语法不支持指定版本号,仅需指定group和module参数即可
  • testCompileOnly声明的依赖仅作用于编译阶段,不会加入测试运行时的类路径,就算写对了排除规则也不会影响测试运行时的依赖版本

解决方案(仅对单元测试生效,不改动生产环境依赖)

首先确认你使用的Spark版本对应的兼容Jackson版本,比如Spark 2.4.x对应Jackson 2.6.x系列,Spark 3.2+对应Jackson 2.13.x系列,同时注意jackson-module-scala的后缀要和Spark依赖的Scala版本一致(比如Spark用Scala 2.12就选后缀为_2.12的包),下面两种方案任选其一即可:

方案1:测试阶段强制指定Spark兼容的Jackson版本(最简便)

在build.gradle中添加如下配置:

configurations {
    // 老版本Gradle替换为testCompile
    testRuntimeClasspath {
        resolutionStrategy {
            // 替换成Spark兼容的对应版本即可
            def jacksonVersion = "2.6.7"
            def scalaVersion = "2.11" // 和Spark依赖的Scala版本保持一致
            force "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}"
            force "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}"
            force "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}"
            force "com.fasterxml.jackson.module:jackson-module-scala_${scalaVersion}:${jacksonVersion}"
        }
    }
}

方案2:测试阶段排除所有Jackson依赖后手动引入适配版本

如果强制版本仍存在冲突,可以选择在测试运行时全局排除Jackson系列依赖,再单独引入适配版本:

configurations {
    testRuntimeClasspath {
        exclude group: 'com.fasterxml.jackson.core'
        exclude group: 'com.fasterxml.jackson.module'
    }
}

dependencies {
    // 替换成Spark兼容的对应版本,Scala版本和Spark保持一致
    def jacksonVersion = "2.6.7"
    def scalaVersion = "2.11"
    testImplementation "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}"
    testImplementation "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}"
    testImplementation "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}"
    testImplementation "com.fasterxml.jackson.module:jackson-module-scala_${scalaVersion}:${jacksonVersion}"
}

配置完成后可以执行./gradlew dependencies --configuration testRuntimeClasspath命令查看测试运行时的Jackson依赖版本,确认已经切换到目标版本后再执行单元测试即可。


内容的提问来源于stack exchange,提问作者Laodao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:07