Don';t使用Gradle中可传递依赖项的较新库版本
在我的Android项目中,我使用Don';t使用Gradle中可传递依赖项的较新库版本,gradle,dependencies,build.gradle,transitive-dependency,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.square
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?您可以使用以下内容:
compile('io.intercom.android:intercom-sdk:1.1.2@aar') {
exclude group: 'com.squareup.okhttp', module: 'okhttp'
}
然而,请注意。如果库使用2.2.0版本中没有的方法,它将失败。您应该定义解决策略来设置特定版本。这将保证您将获得所需的正确版本,无论可传递依赖项版本是什么:
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'
}
}
谢谢这正是我所担心的,因为我已经尝试过了,正如你所说,它失败了。请您解释一下,如果我删除transitive,会发生什么情况?我知道,当您添加@aar注释时,要使依赖项可传递((即依赖项的依赖项),您应该添加“transitive=true”。标记现在您需要使用组id:
com.squareup.okhttp3
谢谢。但这不会迫使我的对讲机依赖项也使用2.2.0吗?或者对讲机会继续使用2.4.0吗?依赖项配置中只能有一个jar版本。如果您想要两个或更多版本,您需要将它们放在单独的依赖项中因此,组合输出的依赖项。您还需要确保在运行时将不同的LIB加载到唯一的classloade中。