如何在OSGI Enroute中将现有的捆绑软件添加为声明性服务

时间:2019-06-07 14:46:19

标签: plugins osgi osgi-bundle declarative-services

我有一个现有的捆绑jar文件夹,我需要将其用作声明性服务。我知道如何将它们像典型的Eclipse插件一样对待,并在我的插件项目OSGI-INF文件夹中的典型Component.xml文件中声明它们,但是现在我想遵循O​​SGI Enroute样式的编码和在其中将我的捆绑软件作为声明性服务加载。当您添加@Component批注时,似乎已使用OSGI Enroute将服务添加到了生成的Component.xml中,但是我很难弄清楚如何将现有的捆绑软件作为声明性服务引入,因为它们没有里面有注解,我无法更改它们的代码(加上它们没有pom)。有什么直观的方法可以解决我所缺少的吗?路由似乎是处理OSGI的好方法。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

最后,@Component批注仅用于在描述声明式服务的构建过程中创建XML文件。如果这些旧服务的代码不再更改,那么手工编写XML文件将是合理的。