繁体   English   中英

如何管理嵌入式OSGi应用程序中的包/依赖关系?

[英]How to manage bundles/dependencies in embedded OSGi application?

我目前正在开发一个插件系统,其中将apache felix嵌入了我的应用程序。 插件本身是OSGi捆绑包。 到目前为止,部署捆绑软件可以正常工作,但是我无法与捆绑软件/插件进行交互。 我尝试了两种方法:

  • 在我的插件中注册服务“插件”,并在我的“主机”应用程序中使用服务侦听器与插件进行交互。

服务侦听器不会被调用,并且我无法转换返回的Plugin对象,因为与捆绑包内的Plugin.class相比,我的Host应用程序的Plugin.class是不同的。

  • 在主机应用程序中注册“ PluginManager”,然后将此管理器加载到捆绑软件中。

在这种情况下,由于此类“重复”问题,我再次无法转换服务类。

我知道为什么这些类是“重复的”,但是我不确定该怎么做。

我当前的设置:

  • plugin-api maven模块:提供插件接口
  • app maven模块:包含嵌入Apache Felix的应用程序
  • 虚拟插件仅依赖plugin-api

我的设置的结构方式是否有问题? 如何在不创建类混乱的情况下访问主机服务? 我是否应该创建另一个模块来编译我的插件,但将其从捆绑软件中排除,然后通过FRAMEWORK_SYSTEMPACKAGES_EXTRA在主机上提供?

您应该在应用程序端定义插件API(以及它使用的所有基于非VM的类型)。 如果这样做,我将制作一个API捆绑包(是的捆绑包)来导出这些包。

确保所有插件均不导出API或至少允许其导入。

在您的应用程序中,在启动Felix嵌入式框架之前,您需要使用getResources("META-INF/MANIFEST.MF")获得类路径上所有JAR的所有清单,并检查Export-Package 然后将所有这些导出的包连接起来,并将OSGi Framework属性org.osgi.framework.system.packages.extra设置为连接的字符串。

这将导出您的类路径上的所有包,也将导出您的API捆绑包。 由于该框架现在可以导出这些软件包,因此您的插件将使用标准的类路径作为提供程序。 因此,该API只有一个来源,您不会陷入地狱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM