gpt4 book ai didi

java - 我应该如何处理具有相同名称但不同类的依赖项?

转载 作者:行者123 更新时间:2023-11-30 11:15:01 25 4
gpt4 key购买 nike

我有一个依赖于两个 jar 文件的 android 项目。每个 jar 文件都包含 org.slf4j.impl.StaticLoggerBinder。这个类的实现在每个文件中都是不同的。当我尝试构建它时导致以下异常:

com.android.dex.DexException: Multiple dex files define Lorg/slf4j/impl/StaticLoggerBinder;

其中一个库是 logback-android,另一个是闭源的。

有什么方法可以让这两者都起作用吗?

最佳答案

在 Java 中不禁止使用两个包含相同类的 jar,但这是危险的,这就是 Android 保守并引发错误的原因。

可能发生的情况是,当类有两个不同版本(例如 1.0 和 1.1)时,在加载类时,一个或另一个以无法真正预测的方式加载。因此,如果编译器让您在 1.1 版上调用给定方法,JVM 将找不到该方法,因为它加载了没有它的 1.0 版。将方法替换为其他所有内容(构造函数、字段等),并考虑到这通常发生在完整的包而不是单个类中,因此您将有很多 1.1 版的类在 1.0 版的其他类上找不到方法,并且等等。

Java 本身对此并没有标准的解决方案。然而,jar 文件只不过是 zip 文件,除非它们被签名,否则它们可以被打开、修改和重新压缩。

您可以打开闭源 .jar,删除它的 org/slf4j 文件夹,重新打包,然后尝试它是否适用于其他版本的 org.slf4j。

或者更好的是,告诉那些人拥有一个“单个 jar ”,里面装着各种东西并不比把 jar 分开

关于java - 我应该如何处理具有相同名称但不同类的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25633425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com