我目前正在努力为我们的 OSGi 捆绑包提供一些对 OSGi 非常不友好的 3rd-party 库。其中一个库(我已经使用 bnd 将其变成了一个包)设法加载它不应该加载的类(至少通过 OSGi 规则)。让我们假设 bundle 被调用Foo
,并且它加载类的包被调用bar
。
Foo
有bar
作为可选导入。不过这应该没关系,因为没有可以导出的捆绑包bar
。我没有使用任何引导委托。jar
包含的-filebar
位于应用程序类路径上(OSGi 框架嵌入在我的应用程序中运行)。
显然Foo
以某种方式绕过了 OSGi 类加载基础设施。如何才能做到这一点?我很确定它不使用自定义类加载器,因为它没有理由拥有一个(没有功能Foo
提供需要这样的东西)。那么,bundle 可以使用哪些标准的、开箱即用的方法来绕过 OSGi 类加载?