Intuit QuickBooks依赖出现Duplicate class类冲突 尝试exclude后仍未解决
类冲突问题解决方案
根本原因
你尝试的全局排除模块方案不生效,是因为com.intuit.quickbooks-online的ipp-v3-java-devkit和oauth2-platform-api两个依赖使用的是带内置依赖的胖包(fat jar),org.apache.http相关类已经被直接打包进这两个jar包内部,并非通过传递依赖引入,因此常规的模块排除规则无法拦截到内置的重复类。
可落地解决方案
方案1:替换为无内置依赖的普通版本(优先推荐)
Intuit官方针对这两个依赖提供了不捆绑第三方依赖的普通版本,你只需要修改依赖声明,移除jar-with-dependencies的分类器即可:
// 修改前的依赖(仅示例,替换成你原有声明) // implementation 'com.intuit.quickbooks-online:ipp-v3-java-devkit:5.0.2:jar-with-dependencies' // implementation 'com.intuit.quickbooks-online:oauth2-platform-api:5.0.2:jar-with-dependencies' // 修改后的依赖 implementation 'com.intuit.quickbooks-online:ipp-v3-java-devkit:5.0.2' implementation 'com.intuit.quickbooks-online:oauth2-platform-api:5.0.2' // 统一指定httpclient版本,避免传递依赖版本冲突 implementation 'org.apache.httpcomponents:httpclient:4.5.14'
修改完成后清理构建缓存重新编译即可。
方案2:打包时排除重复类(适用于必须使用胖包的场景)
如果因为业务要求必须使用带依赖的胖包,可以通过配置打包规则直接排除重复的类文件:
- 如果你是Android项目:
android { packagingOptions { // 单独排除冲突类 exclude 'org/apache/http/impl/client/CloseableHttpClient.class' // 如有多个同包下的重复类,可批量排除整个http包 exclude 'org/apache/http/**' } }
- 如果你是普通Java/Gradle项目:
jar { // 单独排除冲突类 exclude 'org/apache/http/impl/client/CloseableHttpClient.class' // 批量排除整个http包 exclude 'org/apache/http/**' }
验证步骤
修改配置后执行以下命令验证修复结果:
- 检查依赖树:
./gradlew dependencies(Windows系统替换为gradlew.bat dependencies) - 验证构建结果:
./gradlew clean build
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

