Gradle:多重依赖需要slf4j [英] Gradle: Multiple dependences require slf4j

查看:2182
本文介绍了Gradle:多重依赖需要slf4j的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的gradle文件中有两个需要slf4j的库。推进器和万向节。这两个罐子里都有slf4j。所以,即使我告诉gradle忽略它们(multiDexEnabled true),我仍然收到命名空间错误。



有谁知道如何解决这个问题?

  com.android.dex.DexException:多个dex文件定义了Lorg / slf4j / impl / StaticLoggerBinder; 
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android .dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
at com.android.dx .command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx .command.dexer.Main.main(Main.java:245)
在com.android.dx.command.Main.main(Main.java:106)
错误:执行失败的任务':应用:dexDebug。
com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process'command'/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/ java''以非零退出值结束2

我收到的错误(multiDexEnabled为true):

 错误:任务':app:packageAllDebugClassesForMultiDex'的执行失败。 
> java.util.zip.ZipException:重复条目:org / slf4j / helpers / BasicMarker.class


解决方案

Multidex解决了与您描述的问题完全不同的问题。 Multidex修复了每个dex文件约65,000个方法的问题。 你可以在这里找到multidex的文档



相反,您要做的就是从您的某个库中排除sl4j,这里是一个可能看起来像什么的示例,具体取决于哪些依赖项导致该问题:

  compile('com.example.library:library-with-sl4j:1.0'){
exclude group:'org.sl4j',module: 'sl4j-simple'
}

您必须确定哪个库引发了问题以及您需要排除哪个sl4j模块。

理想情况下,您应该使用旧版本通知图书馆作者(他们应该更新),以便您的所有依赖项都使用相同的(最新)版本。


I have two libs in my gradle file that require slf4j. Pusher and Gimbal. Both of these jars have slf4j in them. So even when I tell gradle to ignore them (multiDexEnabled true) I still receive a namespacing error.

Does anyone know how to fix this?

com.android.dex.DexException: Multiple dex files define Lorg/slf4j/impl/StaticLoggerBinder;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
Error:Execution failed for task ':app:dexDebug'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2

The error I receive with (multiDexEnabled true):

Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
>java.util.zip.ZipException: duplicate entry: org/slf4j/helpers/BasicMarker.class

解决方案

Multidex solves a very different problem from the one you describe. Multidex fixes the issue of being limited to ~65,000 methods per dex file. You can find the documentation for multidex here.

Instead, what you want to do is exclude sl4j from one of your libraries, here's an example of what that might look like, depending on what dependencies are causing the issue:

compile ('com.example.library:library-with-sl4j:1.0') {
    exclude group: 'org.sl4j', module: 'sl4j-simple'
}

You will have to identify which library is causing the issue and which sl4j module you need to exclude.

Ideally you would inform the library author(s) using older versions that they should update so that all your dependency are using the same (latest) version.

这篇关于Gradle:多重依赖需要slf4j的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆