如图,一个app(Java)引用了两个第三方包jar(packageA和packageB),分别引用了packageC-0.1和packageC-0.2。如果 packageC-0.2 与 packageC-0.1 兼容,它会工作得很好。然而,有时 packageA 使用了 packageC-0.2 不支持的东西,而 Maven 只能使用最新版本的 jar。这个问题也被称为“Jar Hell”。
在实践中很难重写包 A 或强制其开发人员将包 C 更新到 0.2。
你如何解决这些问题?这种情况经常发生在大型公司中。
我必须声明这个问题主要发生在大公司,因为大公司有很多部门,每次某些开发人员使用新版本的新功能时让整个公司更新一个依赖项会非常昂贵一些依赖 jars。这对小公司来说没什么大不了的。
任何回应将不胜感激。
让我先扔一块砖,然后再得到一颗宝石。
阿里巴巴是世界上最大的电子商务公司之一。我们通过创建一个名为 Pandora 的隔离容器来解决这些问题。它的原理很简单:将这些中间件打包在一起,并使用不同的类加载器加载它们,这样即使它们引用了不同版本的相同包,它们也可以很好地协同工作。但这需要 Pandora 提供的运行时环境作为 tomcat 进程运行。不得不承认,这是一个沉重的计划。Pandora 是基于 JVM 通过类加载器加上类名来识别一个类这一事实而开发的。
如果您知道有人可能知道答案,请与他/她分享链接。
www说
月关宝盒
临摹微笑
相关分类