如何在 Equinox 中获取捆绑包的类加载器?

发布于 2024-08-06 03:51:12 字数 88 浏览 7 评论 0原文

我已经为此阅读了很多 Equinox 代码,但仍然无法找出一种在 Eclipse Equinox 设置中获取 osgi 包的类加载器的非 hacky 方法。有吗?

I have read a lot of equinox code for this, but still can't figure out a non-hacky way of getting the classloader for a osgi bundle in eclipse equinox setup. Is there one?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

北笙凉宸 2024-08-13 03:51:12

在 OSGi 4.3 中您可以使用:

bundle.adapt(BundleWiring.class).getClassLoader()

In OSGi 4.3 you can use:

bundle.adapt(BundleWiring.class).getClassLoader()
时光清浅 2024-08-13 03:51:12

简短的回答(对于 OSGi 4.1 来说肯定如此,4.2 不确定)是你无法获得包的类加载器。但是 Bundle 接口公开了 loadClass() 方法,这将允许您编写一个类加载器来包装捆绑 API 并委托给该 loadClass()方法。或者您可以节省一些时间并使用 Spring DM 的 BundleDelegatingClassLoader 类代替。

The short answer (certainly for OSGi 4.1, not sure of 4.2) is you can't get a bundle's classloader. However the Bundle interface exposes a loadClass() method and this would allow you to write a classloader that wraps the bundle API and delegates to that loadClass() method. Or you can save some time and use Spring DM's BundleDelegatingClassLoader class instead.

静水深流 2024-08-13 03:51:12

Bundle的类加载器可以通过BundleWiring接口获取。这是一个简短的例子:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();

The class loader of a bundle can be obtained through the BundleWiring interface. Here a short example:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
萌︼了一个春 2024-08-13 03:51:12

在普通的 java 代码中,您可以使用 来获取加载给定对象的类加载器,

object.getClass().getClassLoader();

或者甚至

SomeType.class.getClassLoader();

同样适用于 Equinox,只需使用来自您感兴趣的捆绑包的对象或类型。

In normal java code, you can get the class loader that loaded a given object with

object.getClass().getClassLoader();

Or even just

SomeType.class.getClassLoader();

The same applies to Equinox, just use an object or type that comes from the bundle you are interested in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文