0

嘿嘿,

假设我们有这个设置:

应用程序->插件->模块

其中“插件”和“模块”取决于“应用程序”。

应用程序使用 1.0 版的库。模块依赖于相同的库,但版本为 2.0。类是相同的,但在 2.0 中删除了一些方法并添加了一些方法。Plugin使用application的父 ClassLoader和module的 parent ClassLoader plugin

现在的问题是模块使用库的 1.0 版本,但它依赖于 2.0 ->例如找不到方法

解决这个问题的正确方法是什么?可行的方法是重新定位 2.0 版,但在运行时可能有一种解决方法。也许可以更改类加载器来解决问题。

最大限度

4

1 回答 1

1

您的选择是:

  1. 将应用程序升级到 2.0
  2. 将插件降级到 1.0(希望它仍然有效)
  3. 将应用程序“核心”移动到嵌套类加载器中
  4. 更改插件/模块类加载器,使它们不是“父级优先”。请注意,这是一个非常粗略的选项,如果没有正确完成,可能会真正搞砸。

选项 3. 看起来像:

Application Base -> plugin -> module (lib 2.0)
                 -> Application Core (lib 1.0)

这实质上使插件和应用程序核心对等,因此不再存在类加载器问题。

于 2013-07-28T19:07:19.433 回答