Gradle构建时org.apache.http库出现重复类错误,寻求解决办法
Android Gradle构建时org.apache.http类重复定义问题解决
我在使用Gradle构建Android项目时,遇到org.apache.http相关类的重复定义错误,项目构建失败,但当前依赖组合能满足我对HttpMultipartMode、MultipartEntityBuilder、ContentType、HttpPost、HttpRequestBase、HttpUriRequest这些类的访问需求,需要解决构建问题。
部分错误信息如下:
Duplicate class org.apache.http.HttpHeaders found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.TruncatedChunkException found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.annotation.GuardedBy found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.annotation.Immutable found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.annotation.NotThreadSafe found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.annotation.ThreadSafe found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.auth.ContextAwareAuthScheme found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.AuthCache found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.RedirectStrategy found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.entity.DecompressingEntity found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.entity.DeflateDecompressingEntity found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.entity.GzipDecompressingEntity found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.protocol.RequestAcceptEncoding found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.protocol.RequestAuthCache found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.protocol.RequestClientConnControl found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.protocol.ResponseContentEncoding found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.utils.Idn found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.utils.JdkIdn found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.utils.Punycode found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.client.utils.Rfc3492Idn found in modules jetified-httpclient-android-4.3.5.1.jar (org.apache.httpcomponents:httpclient-android:4.3.5.1) and jetified-org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar (org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2) Duplicate class org.apache.http.conn.HttpRoutedConnection found in modules jetified-httpclient-android-4.3.5.1.jar
我的Gradle配置如下:
android { compileSdkVersion 30 buildToolsVersion "30.0.2" useLibrary 'org.apache.http.legacy' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dexOptions { javaMaxHeapSize "4g" } ... defaultConfig { applicationId "com.myapp.android" //Oreo 8.0 minSdkVersion 26 // Android 11 targetSdkVersion 30 } ... } dependencies { ... implementation ('org.apache.httpcomponents:httpclient-android:4.3.5.1') { exclude group: 'org.apache.http' } implementation('org.apache.httpcomponents:httpmime:4.3') { exclude group: 'org.apache.httpcomponents', module: 'httpclient' ... } implementation'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' }
解决方案
方案1:排除重复依赖
错误根源是httpclient-android和org.jbundle.util.osgi.wrapped.org.apache.http.client两个依赖包含重复的org.apache.http类。修改org.jbundle.util.osgi.wrapped.org.apache.http.client的依赖配置,排除冲突的包:
implementation('org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2') { exclude group: 'org.apache.http', module: 'httpclient' exclude group: 'org.apache.http', module: 'httpcore' }
方案2:移除冗余依赖
检查项目是否真的需要org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2。如果核心需求已由httpclient-android和httpmime满足,直接移除该旧版本依赖:
// 移除该行 // implementation'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
方案3:强制统一依赖版本
如果必须保留两个依赖,在android块中添加冲突解决规则,强制使用httpclient-android的版本:
android { ... configurations.all { resolutionStrategy { force 'org.apache.httpcomponents:httpclient-android:4.3.5.1' } } }
验证修改
执行./gradlew app:dependencies(替换app为你的模块名),查看依赖树,确认重复的org.apache.http包已被排除或统一版本。
内容的提问来源于stack exchange,提问作者PewK
相关产品推荐
相关产品推荐

