在我的android项目中,我必须在库“L”中包含一个类文件“X”。一个依赖项目也使用相同的库“L”但旧版本。
现在我的问题是,当我加入“X”时,它总是导入最新版本的“L”。但在某些方面我需要包含旧版本。怎么做到这一点?
答案 0 :(得分:3)
您不应该在项目中使用具有相同包结构的相同类的两个不同版本。
因为ClassLoader会混淆哪一个加载 如果您确实需要加载同一类的两个不同版本,请参考this。
答案 1 :(得分:1)
我同意评论和答案。必须只有一个版本的库,建议的方法是使用最新版本。 通常情况下,图书馆应该支持后向竞争力(如果没有主要的版本差异),并且需要对警告进行删除注释。 如果同时添加两者,则无法保证您的类加载器将选择哪个版本。
作为解决此问题的一种非常有力的方法是手动实现多类加载器方法。
警告:只有当您与此库的关系更像是基于服务调用的方法时,此方法才有效。
注意:不确定,但可能默认的Java类加载器具有父子关系(OSGI classloders肯定有)。 如果是这样,你不需要分开常见的罐子。当您的父项目加载它时,它也应该可以通过子类加载器访问。这就是如何将父类加载器创建的参数对象传递给子类加载器加载的对象方法。