当同一个库被多次声明,或者两个不同的库提供相同的功能时,依赖解析过程中可能会发生冲突。
理解冲突类型
在依赖解析期间,Gradle 处理两种类型的冲突:
- 
版本冲突:当两个或多个依赖项需要给定模块但版本不同时发生。 
- 
能力冲突:当依赖图中包含多个提供相同功能的构件时发生。 
解决版本冲突
当一个组件声明了两个依赖项时,会发生版本冲突:
- 
它们都依赖于同一个模块,例如 com.google.guava:guava
- 
但版本不同,例如 20.0和25.1-android- 
我们的项目本身依赖于 com.google.guava:guava:20.0
- 
我们的项目也依赖于 com.google.inject:guice:4.2.2,而后者又依赖于com.google.guava:guava:25.1-android
 
- 
Gradle 将考虑依赖图中出现的所有请求版本。默认情况下,它将选择这些版本中的最高版本。
解决能力冲突
Gradle 使用属性和能力来识别组件“提供”哪些构件。当依赖图中组件的两个或多个变体声明相同的能力时,就会发生能力冲突。
Gradle 通常会使构建失败并报告冲突。
您可以通过在 resolutionStrategy 块中指定要使用的能力来手动解决冲突。
configurations.configureEach {
    resolutionStrategy.capabilitiesResolution.withCapability("com.example:logging") {
        selectHighestVersion()
    }
}