代码之家  ›  专栏  ›  技术社区  ›  tir38

使用'implementation'时出现分级依赖冲突`

  •  0
  • tir38  · 技术社区  · 6 年前

    lib app . 我刚换了衣服 图书馆 的build.gradle以停止暴露依赖项(即,我从 api -> implementation 应用程序 模块不直接依赖于OkHttp日志拦截器,所以我认为最好不要公开它。

    模块的build.gradle:

    dependencies {
        // api 'com.squareup.okhttp3:logging-interceptor:3.10.0'
        implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
        ...
    }
    

    应用程序 模块的build.gradle:

    dependencies {
        implementation project(':lib')
        implementation group: 'com.zendesk', name: 'support-providers', version: '2.0.0'
        ...
    }
    

    与中的依赖项“com.squareup.okhttp3:logging interceptor”冲突 项目:应用程序。运行时类路径(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 -
    

    图书馆 没有显示出它的依赖关系 应用程序 依赖于Zendesk sdk OkHttp日志截取程序的版本。

    我只看到两种解决方法:

    1. api -> implementation 在里面 模块,从而将日志截取程序公开给 应用程序
    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' 
        ...
    }
    

    应用程序

    如果Zendesk更新了他们的库以使用 对于他们的OkHttp依赖,这能解决问题吗?Gradle会允许两个依赖项使用同一个传递依赖项的不同版本吗,只要它们不向整个项目公开?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Martin Zeitler    6 年前

    与格雷德的作品有点不同。。。

    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 (只留下了想要的版本 ):

    dependencies {
        implementation ('com.zendesk:support-providers:2.0.0") {
            exclude "com.squareup.okhttp3:logging-interceptor:3.8.1"
        }
    }