Gradle添加Jackson依赖后真机运行出现javax.activation重复类报错
重复类构建报错解决方案
根本原因
你引入的 com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.1 依赖会自动传递引入 jakarta.activation:jakarta.activation-api:1.2.1 组件,和项目中已存在的旧版 activation.jar 存在完全重复的 javax.activation 包下类。普通编译阶段不会校验类重复,打包运行到设备执行Dex合并时会检测重复类,因此触发构建失败。
解决方法
方法1:排除jackson组件传递的activation依赖(最常用)
修改你的依赖配置,手动排除jackson-dataformat-xml传递引入的jakarta.activation-api即可:
implementation 'com.fasterxml.jackson.core:jackson-core:2.10.1' implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.1') { // 排除重复的jakarta.activation依赖 exclude group: 'jakarta.activation', module: 'jakarta.activation-api' }
方法2:移除项目中旧的activation.jar
如果你的项目本身没有直接依赖旧版activation.jar的逻辑,可以直接删除libs目录下的activation.jar,保留jackson传递引入的jakarta.activation-api依赖即可解决冲突。如果旧版activation是其他第三方依赖传递引入的,可以对应给该依赖添加exclude规则排除javax.activation:activation。
方法3:全局配置排除冲突依赖
如果上述方法不生效,可以在项目module级build.gradle文件中添加全局排除配置:
// 放在android {} 块同级位置 configurations { // 全局排除所有依赖引入的jakarta.activation-api all*.exclude group: 'jakarta.activation', module: 'jakarta.activation-api' // 如果你选择保留jakarta.activation-api、删除旧版activation,就换成下面这行 // all*.exclude group: 'javax.activation', module: 'activation' }
验证操作
修改配置后点击Android Studio右上角Gradle同步按钮,执行Build -> Clean Project清理旧的构建缓存,再重新运行项目到设备即可。
内容的提问来源于stack exchange,提问作者agega
相关产品推荐
相关产品推荐

