如何在osgi中配置系统范围的包?

时间:2009-09-30 09:21:14

标签: osgi boot delegation

我需要为某些捆绑包提供一个库。这个库使用了RMI,所以它需要(据我所知,至少)使用系统类加载器才能工作(我试图“osgi-fy”库,这会在运行时产生classcastexceptions)。所以我所做的是从使用该库的bundle中删除依赖项,使用属性jars.extra.classpath中包含的库(在eclipse项目的build.properties中)编译它们。

然后我添加了

org.osgi.framework.bootdelegation=com.blipsystems.*
在felix配置文件中

并使用followin命令行启动felix容器:

java -classpath lib/blipnetapi.jar -jar bin/felix.jar

..它反过来为blipnetapi.jar库的类抛出NoClassDefFoundException:

ERROR: Error starting file:/home/frza/felix/load/BlipnetApiOsgiService_1.0.0.1.jar (org.osgi.framework.BundleException: Activator start error in bundle BlipnetApiOsgiService [30].)
java.lang.NoClassDefFoundError: com/blipsystems/blipnet/api/util/BlipNetSecurityManager
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3525)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:1694)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1621)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1076)
    at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: com.blipsystems.blipnet.api.util.BlipNetSecurityManager
    at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:726)
    at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:60)
    at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1631)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    ... 11 more

所以我的问题是:我错过了什么吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题出在您的命令行中。如果指定-jar选项,java将忽略-classpath选项。如果需要使用-jar指定类路径,则需要在您启动的jar的清单中。在这里,我只需将两个jar放在类路径上并手动指定主类(在Felix jar中查看其确切名称)。