【问题标题】:gradle exclude group from compilegradle 从编译中排除组
【发布时间】:2018-01-21 10:07:19
【问题描述】:

我在构建我的应用程序时遇到了这个重复的错误:

addJar(...facebookadapter-4.0.3.jar): 入口
重复条目:com/facebook/ads/AbstractAdListener.class

我得到这个的原因是我的应用程序编译 Facebook 模块,一个属于适配器,一个属于其原始 SDK:

编译('com.ironsource.adapters:facebookadapter:4.0.3@jar') 编译'com.facebook.android:audience-network-sdk:4.27.0' 编译'com.google.ads.mediation:facebook:4.27.0.0'

因此,作为一种解决方案,我试图从包含适配器 jar 编译语句的模块中排除该组:

compile ('com.ironsource.adapters:facebookadapter:4.0.3@jar') {
    exclude (group: 'com/facebook/ads')
}

但是,当我再次构建我的应用程序时,它无法从同一个适配器说明相同的原因

知道为什么没有排除这些类吗?

【问题讨论】:

  • 使用gradlew :app:dependencyInsight --configuration compile --dependency com.facebook.ads检查依赖的来源

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


【解决方案1】:

看起来exclude 块语法不正确。试试

compile ('com.ironsource.adapters:facebookadapter:4.0.3@jar') {
  exclude group: 'com.facebook.ads'
}

更新

所以看起来facebookadapter 内部包含这个类。您不能从 jar 文件中排除类,排除仅适用于每个依赖项级别。

如果您绝对需要此适配器,您可以尝试从所有其他依赖项中排除 facebook 广告传递依赖项。

configurations {
    all*.exclude group: 'com.facebook.ads'
}

【讨论】:

  • 这是我的第一次尝试,两种语法给出相同的结果
  • 哦,所以类在罐子里。这使问题变得更加棘手,请查看我的更新
  • 谢谢,您能否详细说明这一行“您不能从 jar 文件中排除一个类,排除仅适用于每个依赖级别”
  • Gradle 中的每个依赖声明都定义了一个子树:不仅是实际的库(单个 jar 文件),还包括该库的所有依赖项(传递依赖项、多个 jar 文件)。 exclude 指令允许您排除一些传递依赖项(排除几个jar 文件)。如果com.ironsource.adapters:facebookadapter:4.0.3@jar com/facebook/ads/AbstractAdListener.class 是库的一部分,而不是传递依赖项,则不能以这种方式排除它
猜你喜欢
  • 2019-06-19
  • 2013-12-03
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多