我正在用Java编写应用程序插件,我的插件依赖于几个第三方JAR。我将这些依赖项与我的插件捆绑在一起,这样我就可以只部署一个JAR文件。
主机应用程序也可能正在运行其他供应商的插件。不幸的是,主机应用程序将所有插件放在类路径上,我无法更改此行为。如果其他供应商的插件在我之前加载并使用不兼容的依赖版本,我的插件可能会崩溃。
我无法提前测试插件和其他插件之间的兼容性。我也不能接受插件之间的不兼容性 - 如果我的插件崩溃,它对我的公司反映不佳。客户不关心我的插件崩溃的原因,他们会将其归因于我的糟糕编程。
我正在寻找一种方法来阻止其他供应商的插件干扰我自己的插件。有可能吗?
我听说过custom classloaders,但我不确定这个解决方案是否对我有用。
答案 0 :(得分:1)
您可以使用Uberjar。它的作用是将你的所有jar /类移动到custom namespace
,这样你的所有类都不会发生冲突,因为你的依赖项有不同的命名空间。
您可能需要查看maven-shade
答案 1 :(得分:0)
您可以在插件中尝试embed an OSGi container。这将允许您作为OSGi包独立于系统类加载器运行和加载依赖项。