一类,两类加载器

时间:2013-12-02 08:42:37

标签: java osgi bundle classloader

我正试图在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

1 个答案:

答案 0 :(得分:1)

这通常是由于Import-Package和Export-Package标头的规范不正确。确保您引用的类是从同一个包中导入的。在这种情况下,类的类加载器将是相同的。

除非你真的在问为什么一个类框架内(所以从你开始的包中)没有被同一个类加载器框架下加载(在这种情况下,代码启动框架)。在这种情况下,答案是:never(除了可能由JVM引导程序本身加载的类),我建议你更好地理解OSGi中的框架概念。