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

How to Add Existing Bundles as Declarative Services Within OSGI Enroute

我有一个包含现有捆绑 jar 的文件夹,我需要将其用作声明性服务。我知道如何像对待典型的 Eclipse 插件一样对待它们,并在我的插件项目 OSGI-INF 文件夹内的典型 Component.xml 文件中声明它们,但现在我想遵循 OSGI Enroute 风格编码并将我的包作为声明式服务加载到其中。当您添加 @Component 注释时,似乎使用 OSGI Enroute 为您将服务添加到生成的 Component.xml 中,但我正在努力弄清楚如何将我预先存在的包作为声明性服务引入,因为它们不它们中没有注释,我无法更改它们的代码(而且它们没有 poms)。有没有一些直观的方法可以解决我所缺少的问题? Enroute 似乎是处理 OSGI 的好方法。

如果我没看错你的问题,那么:

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

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

  1. 向您的项目添加一个新的 Maven 模块
  2. 将遗留包添加为依赖项
  3. 将这些服务的 "hand-written" XML 文件作为源添加到模块
  4. 让 Maven 解压遗留包
  5. 使用 Maven
  6. 将 "hand-written" XML 文件添加到新包中
  7. 更新捆绑包的 MANIFEST.MF(如果需要)
  8. 将所有内容打包回 OSGi 包

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