集成Azure KeyVault遇LinkageError,求版本冲突排查方案
解决方案
1. 定位未覆盖的依赖冲突
报错显示运行时使用Jackson 2.13.3,但配置强制的是2.13.4,说明存在未被覆盖的依赖源。执行以下Gradle命令生成完整依赖树:
./gradlew app:dependencies --configuration implementation
搜索jackson-core、jackson-databind、jackson-dataformat-xml,找出引入2.13.3版本的依赖库。另外注意azure-sdk-bom优先级高于手动强制版本,可能需要调整BOM版本或移除其对Jackson的版本控制。
2. 修复StAX API版本问题
核心报错是XMLInputFactory缺少指定方法,原因是stax-api:1.0-2版本过旧,该方法在StAX API 1.0.1及以上版本才存在。替换为兼容版本:
implementation group: 'javax.xml.stream', name: 'stax-api', version: '1.0.1'
或直接移除手动引入的stax-api依赖,使用Android系统自带的相关类,避免版本冲突。
3. 简化依赖配置,利用Azure BOM统一管理版本
手动强制大量版本易导致混乱,建议保留azure-sdk-bom并确保其与Azure库版本匹配,移除所有手动的Jackson和Azure Core版本强制,让BOM自动管理版本:
// 引入BOM,放在依赖最前面 implementation platform("com.azure:azure-sdk-bom:1.2.5") // Azure库无需指定版本,由BOM自动匹配 implementation 'com.azure:azure-security-keyvault-keys' implementation 'com.azure:azure-security-keyvault-secrets' implementation 'com.azure:azure-storage-blob' implementation 'com.azure:azure-identity' implementation 'com.azure:azure-core-http-netty' // 非Azure依赖单独指定版本 implementation 'com.microsoft.azure:msal4j:1.13.0' implementation 'com.microsoft.azure:msal4j-persistence-extension:1.1.0' implementation 'com.google.guava:guava:27.0.1-android'
4. 移除冲突的旧版Azure存储依赖
同时引入azure-storage:8.6.6(旧版)和azure-storage-blob:12.19.0(新版)会引发大量依赖冲突,直接移除旧版com.microsoft.azure:azure-storage:8.6.6,仅使用新版azure-storage-blob。
5. 验证修复效果
执行./gradlew clean build清理并构建项目,运行App测试。若仍有问题,用以下命令查看具体依赖来源,针对性排除:
./gradlew app:dependencyInsight --dependency jackson-core --configuration implementation
内容的提问来源于stack exchange,提问作者Akash kumar
相关产品推荐
相关产品推荐

