0

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

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

我无法提前测试我的插件和其他插件之间的兼容性。我说插件之间不兼容也是不可接受的——如果我的插件崩溃了,这对我的公司来说是很糟糕的。客户并不关心我的插件为什么会崩溃,他们会将其归咎于我的糟糕编程。

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

我听说过自定义类加载器,但我不确定该解决方案是否适合我。

4

2 回答 2

1

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

你可能想看看maven-shade

于 2013-07-26T14:12:56.143 回答
0

您可以尝试在插件中嵌入 OSGi 容器。这将允许您在与系统类加载器隔离的情况下将依赖项作为 OSGi 包运行和加载。

费利克斯的说明

于 2013-07-26T14:30:01.063 回答