【问题标题】:How to prevent third-party JARs on the classpath from overriding my class dependencies?如何防止类路径上的第三方 JAR 覆盖我的类依赖项?
【发布时间】:2013-07-26 13:54:51
【问题描述】:

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

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

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

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

我听说过custom classloaders,但我不确定该解决方案是否适合我。

【问题讨论】:

    标签: java plugins classpath classloader


    【解决方案1】:

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

    你可能想看看maven-shade

    【讨论】:

      【解决方案2】:

      您可以尝试在您的插件中embed an OSGi container。这将允许您在与系统类加载器隔离的情况下以 OSGi 包的形式运行和加载依赖项。

      Instructions for Felix.

      【讨论】:

      • 您可能是对的,但这似乎需要大量工作?我对 OSGi 一点也不熟悉。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2012-07-26
      • 2014-08-08
      相关资源
      最近更新 更多