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

如何在osgi中配置系统范围的软件包?,osgi,boot,delegation,Osgi,Boot,Delegation,我需要为一些包提供一个库。这个库使用RMI,所以据我所知,它至少需要使用系统类加载器才能工作。我尝试osgi对库进行加密,这导致运行时出现ClassCastException。因此,我所做的是从使用该库的bundle中删除依赖项,使用eclipse项目的build.properties中的属性jars.extra.classpath中包含的库来编译它们 然后我补充说 org.osgi.framework.bootdelegation=com.blipsystems.* 在felix配置文件中,

我需要为一些包提供一个库。这个库使用RMI,所以据我所知,它至少需要使用系统类加载器才能工作。我尝试osgi对库进行加密,这导致运行时出现ClassCastException。因此,我所做的是从使用该库的bundle中删除依赖项,使用eclipse项目的build.properties中的属性jars.extra.classpath中包含的库来编译它们

然后我补充说

org.osgi.framework.bootdelegation=com.blipsystems.*
在felix配置文件中,使用以下命令行启动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
所以我的问题是:我是否遗漏了什么?我做错了什么?

问题出在您的命令行中。如果指定-jar选项,java将忽略-classpath选项。如果需要使用-jar指定一个类路径,那么它需要位于启动的jar的清单中。在这里,我只需将两个jar放在类路径上,并手动指定Felix jar中的主类peek作为其确切名称