gpt4 book ai didi

使用 `implementation`时Gradle依赖冲突

转载 作者:行者123 更新时间:2023-12-03 03:39:54 27 4
gpt4 key购买 nike

我有一个包含两个 gradle 模块的项目:libapp。我刚刚更改了 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'
...
}

但是我现在遇到编译问题:

Conflict with dependency 'com.squareup.okhttp3:logging-interceptor' in project ':app'. Resolved versions for runtime classpath (3.10.0) and compile classpath (3.8.1) differ

如果我查看项目结构,我会看到以下内容:

+--- 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,而 Zendesk sdk 依赖于 OkHttp 日志记录的不同版本拦截器。

我只看到两种方法来解决这个问题:

  1. 恢复lib模块中的api ->实现,从而将日志拦截器暴露给app模块
  2. 声明对日志记录拦截器的顶级依赖项并设置为 3.10 以强制 Zendesk 使用最新版本:

应用 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 依赖项的实现来解决问题吗? Gradle 是否会允许两个依赖项使用同一传递依赖项的不同版本,只要它们不向整个项目公开?

最佳答案

对于 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"
}
}

关于使用 `implementation`时Gradle依赖冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com