plugins - 如何在 OSGI Enroute 中添加现有捆绑包作为声明性服务
问题描述
我有一个包含需要用作声明性服务的现有捆绑 jar 的文件夹。我知道如何将这些视为典型的 Eclipse 插件,并在我的插件项目 OSGI-INF 文件夹内的典型 Component.xml 文件中声明它们,但现在我想遵循 OSGI Enroute 编码风格和在那里将我的捆绑包作为声明性服务加载。当您添加 @Component 注释时,似乎使用 OSGI Enroute 将服务添加到生成的 Component.xml 中,但我正在努力弄清楚如何将我预先存在的包作为声明性服务引入,因为它们没有里面有注释,我不能改变他们的代码(而且他们没有 pom)。有没有一些我想念的直观方法来解决这个问题?否则,Enroute 似乎是处理 OSGI 的好方法。
解决方案
如果我理解你的问题是正确的,那么:
- 您有旧版捆绑包
- 您不能更改这些捆绑包的代码
- 这些捆绑包中的服务不是声明式服务(使用
@Component
注释) - 您希望将这些服务作为声明性服务
在这种情况下,您可以自己为声明式服务编写 XML 文件:
- 将新的 Maven 模块添加到您的项目中
- 添加旧捆绑包作为依赖项
- 将这些服务的“手写”XML 文件添加为模块的源
- 让 Maven 解压遗留包
- 使用 Maven 将“手写”XML 文件添加到新包中
- 更新捆绑包的 MANIFEST.MF(如有必要)
- 将所有内容打包回 OSGi 包
最后,@Component
注释仅用于在构建期间创建描述声明式服务的 XML 文件。如果这些旧服务的代码不再更改,则手动编写 XML 文件是合理的。
推荐阅读
- javascript - `window` 对象的所有全局变量和全局函数成员吗?
- javascript - 网格自动流javascript实现?
- excel - 工作簿对象在关闭后仍然存在,并且工作簿在工作簿关闭后的任何后续 excel 操作中重新打开
- node.js - Knex + SQL Server whereIn query 8-12s -- raw version 返回 NO 结果,但如果我直接输入 .toQuery() 结果,我会得到结果
- rx-java2 - 如何处理 Micronaut 中通过 blockingFirst() 引发的 UndeliverableException 错误?
- azure - 使用 Active Directory 重定向到 signin-oidc 的 Azure 应用程序网关应用服务
- function - 是否可以有一个模块函数来修改调用者脚本的参数值?
- html - 自动添加 CSS Grid 不需要的列
- r - 在 R 中的脚本中简单切片失败的原因是什么?
- rest - 如何设计多种调用 REST API 的方式