我有一个类加载器问题。因为我是一个 osgi 新手,希望答案不是那么难:)

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

编译 FelixHost 时使用下一个 jar

  • 菲利克斯.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

但运行时,框架将加载 OBR 的实现。该 OBR 包还包含接口定义。我认为这就是为什么有 classCastException..

我实际上希望Felixhost与OBR一起进行一些初步的配置。

欢迎任何想法。

有帮助吗?

解决方案

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

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

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

此问题的一种可能解决方案是将初始配置逻辑分离到一个单独的包中并执行 OBR 相关工作 来自 OSGi 世界内部. 。然后,您可以删除 FelixHost 对“osgi.service.obr-1.0.2.jar”的编译依赖,并且只加载一份 OBR 接口副本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top