添加Google Cloud Translation API后出现commons-codec类重复冲突如何解决
依赖冲突解决方案
问题根因
JetEncryptor_v19.aar内部已经内置了org.apache.commons.codec包下的所有类,而Google Cloud Translation API会默认传递引入commons-codec:1.15依赖,两者的类全路径完全重复,导致构建时报重复类错误。全局排除commons-codec后,Google翻译API运行时需要调用的DigestUtils类无来源,所以抛出类找不到异常。
可行方案
方案1:仅排除Google Cloud Translation API传递的commons-codec依赖(推荐)
不要使用全局排除commons-codec的配置,仅在引入谷歌翻译API的依赖项上单独排除commons-codec,让翻译API自动使用JetEncryptor中内置的commons-codec类即可:
dependencies { // 把你原有引入谷歌云翻译API的代码修改为如下格式,仅在该依赖上排除commons-codec implementation('com.google.cloud:google-cloud-translate:你使用的版本号') { exclude group: 'commons-codec', module: 'commons-codec' } // 其余原有依赖(包括JetEncryptor_v19的引入)保持不变即可 }
方案2:强制指定依赖版本规则
如果方案1未生效,可以在app模块的build.gradle中添加依赖 resolutionStrategy 规则,统一commons-codec的版本:
configurations.all { resolutionStrategy { // 强制所有依赖使用统一版本的commons-codec,可根据JetEncryptor内置的版本调整版本号 force 'commons-codec:commons-codec:1.15' // 优先使用项目内置的aar/模块中的类 preferProjectModules() } }
注意:使用该方案时需要删除你之前添加的全局排除commons-codec的配置。
方案3:重命名JetEncryptor内部的codec包
如果上述方案都因为JetEncryptor内置的commons-codec版本过旧,和谷歌翻译API不兼容导致报错,可以通过JarJar、shadow等打包工具,将JetEncryptor内部的org.apache.commons.codec包重命名为自定义包名(例如com.jet.encryptor.codec),完全避免包名重复冲突,双方依赖可以独立运行互不影响。
内容的提问来源于stack exchange,提问作者BhushanDC
相关产品推荐
相关产品推荐

