首页 > 解决方案 > 如何在 OSGI Enroute 中添加现有捆绑包作为声明性服务

问题描述

我有一个包含需要用作声明性服务的现有捆绑 jar 的文件夹。我知道如何将这些视为典型的 Eclipse 插件,并在我的插件项目 OSGI-INF 文件夹内的典型 Component.xml 文件中声明它们,但现在我想遵循 OSGI Enroute 编码风格和在那里将我的捆绑包作为声明性服务加载。当您添加 @Component 注释时,似乎使用 OSGI Enroute 将服务添加到生成的 Component.xml 中,但我正在努力弄清楚如何将我预先存在的包作为声明性服务引入,因为它们没有里面有注释,我不能改变他们的代码(而且他们没有 pom)。有没有一些我想念的直观方法来解决这个问题?否则,Enroute 似乎是处理 OSGI 的好方法。

标签: pluginsosgiosgi-bundledeclarative-services

解决方案


如果我理解你的问题是正确的,那么:

  1. 您有旧版捆绑包
  2. 您不能更改这些捆绑包的代码
  3. 这些捆绑包中的服务不是声明式服务(使用@Component注释)
  4. 您希望将这些服务作为声明性服务

在这种情况下,您可以自己为声明式服务编写 XML 文件:

  1. 将新的 Maven 模块添加到您的项目中
  2. 添加旧捆绑包作为依赖项
  3. 将这些服务的“手写”XML 文件添加为模块的源
  4. 让 Maven 解压遗留包
  5. 使用 Maven 将“手写”XML 文件添加到新包中
  6. 更新捆绑包的 MANIFEST.MF(如有必要)
  7. 将所有内容打包回 OSGi 包

最后,@Component注释仅用于在构建期间创建描述声明式服务的 XML 文件。如果这些旧服务的代码不再更改,则手动编写 XML 文件是合理的。


推荐阅读