我有一个包含两个gradle模块的项目:lib
和app
。我刚刚更改了lib
的build.gradle以停止公开依赖项(即,我从api
-> implementation
移走了)。 app
模块不直接依赖于OkHttp日志拦截器,因此我认为最好不要公开它。
lib
模块的build.gradle:
dependencies {
// api 'com.squareup.okhttp3:logging-interceptor:3.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
...
}
app
模块的build.gradle:
dependencies {
implementation project(':lib')
implementation group: 'com.zendesk', name: 'support-providers', version: '2.0.0'
...
}
但是我现在看到一个编译问题:
与依赖项“ com.squareup.okhttp3:logging-interceptor”中的冲突 专案':app'。运行时类路径(3.10.0)和 编译类路径(3.8.1)不同
如果我查看项目结构,我会看到:
+--- project :lib
...
+--- com.zendesk:support-providers:2.0.0
| +--- com.zendesk:core:1.0.0
| | +--- com.zendesk:java-common:1.13
| | +--- com.google.dagger:dagger:2.12 -> 2.15 (*)
| | +--- com.squareup.retrofit2:retrofit:2.3.0
| | | \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.8.1
| | | \--- com.squareup.okio:okio:1.13.0
| | +--- com.squareup.retrofit2:converter-gson:2.3.0
| | | +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
| | | \--- com.google.code.gson:gson:2.7
| | +--- com.squareup.okhttp3:logging-interceptor:3.8.1 // <----- SEE HERE
| | | \--- com.squareup.okhttp3:okhttp:3.8.1 (*)
| | +--- com.squareup.okhttp3:okhttp:3.8.1 (*)
| | +--- com.android.support:support-annotations:27.0.2 -
lib
并没有透露其任何依赖性(显然),app
取决于Zendesk sdk,后者取决于Okem日志拦截器的不同版本。
我只看到两种解决方法:
api -> implementation
模块中还原lib
,从而将日志拦截器暴露给app
模块 app
build.gradle:
dependencies {
implementation project(':lib')
implementation group: 'com.zendesk', name: 'support-providers', version: '2.0.0'
// used just to force zendesk to use 3.10
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
...
}
这些都不是很干净。 IMO app
模块应该对OkHttp日志拦截器一无所知。还有其他选择吗?
如果Zendesk将其库更新为对其OkHttp依赖项使用implementation
,是否可以解决问题?只要Gradle不会在整个项目中公开它们,是否会让两个依赖使用同一传递依赖的不同版本?
答案 0 :(得分:2)
与Gradle一起使用,效果有些不同...
一个人可以强制使用3.10.0
版本:
dependencies {
implementation group: 'com.zendesk', name: 'support-providers', version: '2.0.0'
}
configurations.all() {
resolutionStrategy.force "com.squareup.okhttp3:logging-interceptor:3.10.0"
}
或仅排除版本3.8.1
(除了所需的版本3.10.0
,什么都没有):
dependencies {
implementation ('com.zendesk:support-providers:2.0.0") {
exclude "com.squareup.okhttp3:logging-interceptor:3.8.1"
}
}