【问题标题】:Enforce gradle not to upgrade transitive dependencies强制 gradle 不升级传递依赖
【发布时间】:2021-07-14 05:32:19
【问题描述】:

我遇到了 gradle(6.7.1) 自动升级传递依赖的问题。 考虑两个父依赖AB,它们都使用不同版本的PICASSO作为传递依赖

A -> com.squareup.picasso:picasso:2.5.2 

B -> com.squareup.picasso:picasso:2.71828

在构建 android 项目时,PICASSO 会自动升级到 2.71828。 由于 PICASSO API INITIALISATION 对于这两个版本(2.5.2 和 2.71828)是不同的, A 恰好抛出 NoSuchMethodException 。 我如何强制 gradle 为 A 和 B 使用 特定 PICASSO 版本。

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-studio gradle android-gradle-plugin build.gradle


    【解决方案1】:

    您可以在声明传递依赖时尝试使用 Gradle strictly 约束。

    例如:

    implementation 'org.apache.httpcomponents:httpclient:4.5.4'
    implementation('commons-codec:commons-codec') {
       version {
         strictly '1.9'
       }
    }
    
    

    这里commons-codehttpclient的内部依赖,通过将strictly约束添加到commons-codehttpclient将被强制使用1.9版本,而不管其项目内部定义了什么。

    您可以找到更多详情here


    但是假设在您的情况下,依赖项 B 与旧版本的毕加索不兼容,那么您可以将其中一个依赖项提取到单独的模块中,并在那里使传递依赖项严格。

    然后您可以尝试添加新模块并查看它是否有效,或者创建第二个依赖项的 jar 并将其添加到您的项目中,这样 Gradle 就不会首先运行冲突解决

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2020-05-08
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 2021-01-04
        相关资源
        最近更新 更多