如何防止类路径上的第三方JAR覆盖我的类依赖?

时间:2013-07-26 13:54:51

标签: java plugins classpath classloader

我正在用Java编写应用程序插件,我的插件依赖于几个第三方JAR。我将这些依赖项与我的插件捆绑在一起,这样我就可以只部署一个JAR文件。

主机应用程序也可能正在运行其他供应商的插件。不幸的是,主机应用程序将所有插件放在类路径上,我无法更改此行为。如果其他供应商的插件在我之前加载并使用不兼容的依赖版本,我的插件可能会崩溃。

我无法提前测试插件和其他插件之间的兼容性。我也不能接受插件之间的不兼容性 - 如果我的插件崩溃,它对我的​​公司反映不佳。客户不关心我的插件崩溃的原因,他们会将其归因于我的糟糕编程。

我正在寻找一种方法来阻止其他供应商的插件干扰我自己的插件。有可能吗?

我听说过custom classloaders,但我不确定这个解决方案是否对我有用。

2 个答案:

答案 0 :(得分:1)

您可以使用Uberjar。它的作用是将你的所有jar /类移动到custom namespace,这样你的所有类都不会发生冲突,因为你的依赖项有不同的命名空间。

您可能需要查看maven-shade

答案 1 :(得分:0)

您可以在插件中尝试embed an OSGi container。这将允许您作为OSGi包独立于系统类加载器运行和加载依赖项。

Instructions for Felix