在 Eclipse 中使用多个 OSGi 包

Working with multiple OSGi bundles in Eclipse

我目前正在学习如何使用 OSGi,我有一个小问题似乎无法Google回答。

我正在尝试为我的移动应用构建后端,后端将连接到多个下游节点。目前,此后端最初仅支持我的移动应用程序,但我计划将我的门户网站也转移到使用它。

看看 OSGi 如何让我将我的代码模块化成几个包,这就是我的想法:

Backend
|--- osgi-mobile
|--- osgi-webportal
|--- osgi-downstreamnode1
|--- osgi-downstreamnode2

我的问题在于 using/consuming 来自前端包中下游节点包的服务(例如 osgi-mobile using/consuming 来自 osgi-downstreamnode1).

我目前正在 Eclipse Mars 中构建它们,并且没有将整个 osgi-downstreamnode1 包打包到一个 JAR 中,并将其导入到 osgi -mobile 包,我似乎无法弄清楚如何在 Eclipse 中引用包,以及如何让 osgi-mobile 包在运行时调用其他包.

可在 OSGi 中使用的服务是通过接口定义的。该接口必须独立于实现包: bundleA 使用在 bundleBase 中定义的 ServiceInterface 的实现。现在 bundleA 依赖于 bundleBase。然后你可以添加 bundeB 它实现了接口,因此也依赖于 bundleBase.

通过 OSGi bundleA 现在可以请求服务 ServiceInterface 并获取 bundleeB 的实例,而无需直接依赖。 参见 http://www.vogella.com/tutorials/OSGiServices/article.html

您需要在开发时就考虑服务。 hotzst 引用的教程应该有所帮助。打包的基础是为每个 eclipse 项目创建一个包。然后如何将它们打包在一起取决于您要部署到的位置。

我猜您目前正在使用 eclipse PDE 透视图来开发您的应用程序。我不会推荐这个。如果您知道自己不开发 Eclipse RCP 应用程序,那么我会考虑普通 Eclipse + maven 或 Bndtools。我得到了很多 tutorials for developing in plain eclipse and deploy into Apache Karaf. For bndtools see their tutorials.

无论如何,您应该会经历一段相当长的学习曲线。所以有些书可能会有所帮助,例如 OSGi in practice or Apache Karaf Cookbook.

感谢您的帮助!

通过反复试验,我设法通过 Export-Package 选项和 Import-Package 选项得到了我想要的东西通过 MANIFEST.MF。我 运行 遇到了另一组关于使用第三方 JAR 的问题,但我会 post 在一个新问题中解决这个问题。