How to get classloader for a bundle in equinox?

后端 未结 4 637
忘了有多久
忘了有多久 2020-12-15 21:10

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?<

相关标签:
4条回答
  • 2020-12-15 21:28

    In OSGi 4.3 you can use:

    bundle.adapt(BundleWiring.class).getClassLoader()
    
    0 讨论(0)
  • 2020-12-15 21:32

    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.

    0 讨论(0)
  • 2020-12-15 21:46

    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();
    
    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题