我有一个ClassLoader问题。 因为我非常喜欢osgi,希望答案不是那么难:)
我认为它与Compile与Runtime库有关。 在Netbeans 6.7.1项目属性中,编译时lib总是传播到其他类别..所以我无法区分那里。
编译FelixHost时,使用下一个罐子
但是在运行时,框架将为OBR加载一个实现。 该OBR包还包含接口定义。我想这就是为什么有一个classCastException ..
我实际上希望FelixHost与OBR一起做一些初步的工作 供应..
欢迎任何想法。
答案 0 :(得分: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相关的工作 。然后,您可以在“osgi.service.obr-1.0.2.jar”上删除FelixHost的编译依赖项,并且只加载一个OBR接口副本。