不要在Gradle中使用传递依赖的后期库版本

时间:2015-07-14 09:13:26

标签: gradle dependencies build.gradle transitive-dependency

在我的Android项目中我使用

compile 'com.squareup.okhttp:okhttp:2.2.0'

我需要在2.2.0版本中使用okhttp才能使我的代码正常工作。但是当我添加

时我遇到了问题
compile('io.intercom.android:intercom-sdk:1.1.2@aar') {
        transitive = true
}

因为在intercom-sdk中,对于以后的版本再次存在okhttp依赖性:

compile 'com.squareup.okhttp:okhttp:2.4.0'

结果是我的代码使用的是更高版本的2.4.0而不是我想要的2.2.0。请问在我的模块中如何使用我指定的2.2.0并让对讲机使用其2.4.0?

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

compile('io.intercom.android:intercom-sdk:1.1.2@aar') {
    exclude group: 'com.squareup.okhttp', module: 'okhttp'
  }

但要注意。如果库使用2.2.0版本中不存在的方法,则它将失败。

答案 1 :(得分:2)

您应该定义解决方案策略以设置特定版本。这将保证您将获得您希望的正确版本,无论传递依赖版本是什么:

allProjects {
   configurations.all {
       resolutionStrategy {
           eachDependency { DependencyResolveDetails details ->
               if (details.requested.name == 'okhttp') {
                   details.useTarget('com.squareup.okhttp:okhttp:2.2.0')
               }
            }
        }
     }
  }

在较新版本的Gradle中,您可以使用:

allProjects {
   configurations.all {
       resolutionStrategy.force 'com.squareup.okhttp:okhttp:2.2.0'
     }
 }