【问题标题】:Gradle TransitiveDependency Version ConflictGradle TransitiveDependency 版本冲突
【发布时间】:2018-09-07 10:37:41
【问题描述】:

我一直在使用 PDFBox 为现有项目实现扩展的 pdf 创建 API。 为了使用 PDFBox,我需要在 build.gradle 中包含以下依赖项:

implementation('com.tom_roush:pdfbox-android:1.8.10.0')

现有项目使用的依赖项之一是用于加密组件的 spongycastle:

implementation 'com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0'

所以我首先将这两个依赖项都包含到我的 build.gradle 文件中,然后 试图构建应用程序。这是我收到的异常:

程序类型已存在: org.spongycastle.cert.CertRuntimeException Message{kind=ERROR, text=程序类型已经存在: org.spongycastle.cert.CertRuntimeException,来源=[未知来源 文件],工具名=Optional.of(D8)}

我认为这个问题的发生是由于pdfbox的传递依赖导致的版本冲突,它们如下:

我尝试使用 build.gradle 中的依赖排除来解决问题:

implementation('com.tom_roush:pdfbox-android:1.8.10.0'){
exclude group:'com.madgag.spongycastle'
}

因为据我所知,我没有在我的 pdfbox 实现中直接使用加密方面。

【问题讨论】:

    标签: android gradle android-gradle-plugin dependencies pdfbox


    【解决方案1】:

    非常感谢 - 我已经能够使用不同的方法解决问题。

    configurations.all {
    resolutionStrategy {
        dependencySubstitution {
            substitute module('com.madgag.spongycastle:pkix:1.54.0.0') with module('com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0')
        }
    }
    

    这解决了我的问题。

    【讨论】:

      【解决方案2】:

      你可以试试force predefined versions

      configurations.all { 
          resolutionStrategy {
              failOnVersionConflict()
              force 'com.magdag.spongycastle:prov:1.58.0.0'
              force 'com.magdag.spongycastle:core:1.58.0.0'
          }
      }
      

      由于版本的原因,库也可能发生变化。可能是已删除或重命名的文件。也可以尝试强制1.54.0.0版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-26
        • 1970-01-01
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        相关资源
        最近更新 更多