我最近遇到过一些库,这些库为他们的jar文件提供了与它们捆绑在一起的依赖项(有时称为 uber jar , fat jar 或 shaved jar 感谢Maven的Shade插件。)
问题是我有两个包含的库(A
和B
)
同一个类文件(same.fully.qulaified.class
)的不同版本,其中一个库与另一个库中的类文件版本不能很好地兼容。我知道我可以使用自定义类加载器来sandbox the classes from A
and B
,但如果存在,我宁愿选择更简单,更标准的解决方案。
另外,总的来说,我很惊讶这些图书馆完全是作为超级罐发布的。看起来当图书馆提供商以这种方式打包它们的依赖关系时,这种问题可能会出现。
所以我有几个问题:
1)图书馆提供商发布优步罐子是否是常见和公认的做法?
2)是否存在标准解决方案来解决在两个必需库具有不同版本的类时在运行时出现的冲突瞬态依赖性(依赖性的依赖性)?