我正试图在Intellij中从eclipse开始一些捆绑。 问题出在我之后:
FrameworkFactory fFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
Framework framework = fFactory.newFramework(config);...
context = framework.getBundleContext();
bundle = context.installBundle(myBundle);
bundle.start();
我想使用Bundle中的一个类,我看到我的类被另一个类加载器再次加载。那么,我应该怎么做才能使用我启动捆绑时加载的相同类? 两个类加载器是:
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader
java.net.URLClassLoader
答案 0 :(得分:1)
这通常是由于Import-Package和Export-Package标头的规范不正确。确保您引用的类是从同一个包中导入的。在这种情况下,类的类加载器将是相同的。
除非你真的在问为什么一个类在框架内(所以从你开始的包中)没有被同一个类加载器在框架下加载(在这种情况下,代码启动框架)。在这种情况下,答案是:never(除了可能由JVM引导程序本身加载的类),我建议你更好地理解OSGi中的框架概念。