当前位置: 代码迷 >> java >> osgi bundle导出类,但仍在classpath中拾取类
  详细解决方案

osgi bundle导出类,但仍在classpath中拾取类

热度:72   发布时间:2023-07-16 17:53:39.0

我正在尝试将部署耳朵与使用osgi包并导出一些类的web应用一起使用。 这是在应用服务器中。 捆绑软件输出了从B类派生的A类。ClassB实际上是捆绑软件决定提供的第三方开源类。 问题是我的耳朵的lib目录中也有另一个版本的classB。

在尝试部署应用程序时,我遇到一个奇怪的错误,从osgi捆绑软件jar中加载了类A,但是由于classB是从耳朵的lib目录而不是从osgi捆绑软件中加载的,即使它在那儿也是如此。

这导致了错误,这是由于classA期望在其基类中存在某些行为而导致的,但实际上不存在,因为classB是从捆绑包外部加载的。

我不确定如何解决此问题-这是我与osgi的第一次接触,我有点担心这可能比classpath地狱还要糟糕,尤其是对于需要与osgi进行部分集成而不是osgi进行集成的应用程序。

我知道人们正在尝试混合使用Java EE和OSGi堆栈,但是我认为这是解决问题的良方。 他们都对类加载器的工作方式有自己的期望,让他们合作可能是一个问题。

如果必须这样做,可以通过将尽可能多的Web应用程序放入osgi容器中来使自己的生活更轻松。 或者,找到初始化osgi运行时的位置,并更改其父级的类加载器的连接方式。您甚至可以编写自定义过滤类加载器,以防止OSGi从webapp类加载器加载某些类。 可能有很多事情,但也许您真的不想走这条路...

  相关解决方案