我已经为此阅读了很多 Equinox 代码,但仍然无法找出在 Eclipse Equinox 设置中获取 osgi 包的类加载器的非 hacky 方法。有吗?
问问题
16079 次
4 回答
39
在 OSGi 4.3 中,您可以使用:
bundle.adapt(BundleWiring.class).getClassLoader()
于 2013-03-07T19:59:27.970 回答
11
简短的回答(当然对于 OSGi 4.1,不确定 4.2)是您无法获得捆绑包的类加载器。但是,该Bundle
接口公开了一个loadClass()
方法,这将允许您编写一个类加载器来包装捆绑 API 并委托给该loadClass()
方法。或者您可以节省一些时间并改用 Spring DM 的BundleDelegatingClassLoader
类。
于 2009-10-01T13:42:03.463 回答
6
bundle的类加载器可以通过BundleWiring接口获取。这里有一个简短的例子:
Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
于 2013-10-15T07:04:17.737 回答
2
在普通的 java 代码中,您可以获取加载给定对象的类加载器
object.getClass().getClassLoader();
甚至只是
SomeType.class.getClassLoader();
这同样适用于 Equinox,只需使用来自您感兴趣的包的对象或类型。
于 2009-10-02T02:44:16.027 回答