0

我有一个 ClassLoader 问题。由于我是一个 osgi 新手,希望答案不是那么难:)

我认为这与编译与运行时库有关。 在 Netbeans 6.7.1 项目属性中,编译时库总是传播到其他类别。所以我无法区分那里。

编译 FelixHost 时使用下一个 jar

  • 费利克斯罐子
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

但是在运行时,框架会为 OBR 加载一个实现。此 OBR 捆绑包还包含接口定义。我认为这就是为什么有一个 classCastException ..

我实际上希望 FelixHost 与 OBR 一起进行一些初始配置。

欢迎任何想法。

4

1 回答 1

1

我假设您所说的“FelixHost”指的是封装和启动 Felix 框架的项目。

问题是您必须小心“OSGi 世界”和“非 OSGi 世界”之间的界限。您在 FelixHost 的类路径中放置的所有内容(即,在您的情况下也是所有编译时依赖项)基本上都存在于 OSGi 世界之外,因此不建议使用像“osgi.service.obr-1.0.2.jar”这样的包这样。

正如您所指出的,如果 OSGi 框架还加载“osgi.service.obr-1.0.2.jar”包,您将进入 ClassCastException,因为您基本上有两个版本的相同类(接口)。

此问题的一种可能解决方案是将您的初始供应逻辑分离到一个单独的包中,并在 OSGi 世界中执行与 OBR 相关的工作。然后你可以去掉FelixHost对“osgi.service.obr-1.0.2.jar”的编译依赖,只加载一份OBR接口。

于 2009-08-10T18:44:35.143 回答