高效的 OSGi 开发工作流程

2022-09-03 14:30:27

我从事的产品由许多捆绑包组成,这些捆绑包在karaf之上运行。通常,我们的开发人员一次处理一个捆绑包。我们的正常开发是这样的:编码,编译,复制捆绑包以部署文件夹,测试。我们还发现,hotdeploy 只是拒绝覆盖某些作为功能安装的捆绑包,而无需重新启动服务器或卸载/重新安装功能,因此有时周期更长。

我的问题是:社区中是否有人有更好的方法?我们做事的方式是有效的,但我觉得它非常缓慢和低效,我敢打赌有人想出了更好的东西!

编辑:我意识到我的问题很不清楚...我们在卡拉夫下面使用Equinox。我们还使用Eclipse和Maven,尽管我不知道使用Maven是否相关。


答案 1

听起来你想要 dev:watch 命令。从文档中:

监视命令可用于在开发时提供帮助。它允许您配置一组将受到监视的 URL。与给定 URL 匹配的所有捆绑包位置都将自动更新。这样就无需手动更新分发包,甚至在需要时将分发包复制到系统文件夹。请注意,只有基于 maven 的 url 和 maven 快照实际上会自动更新,因此,如果您运行

开发:观看 *

它实际上将监视其 URL 中具有与 mvn:* 匹配的位置的所有捆绑包,这些捆绑包的 url 中包含“-SNAPSHOT”。

从Karaf shell执行“dev:watch --help”将列出其可用的标志和参数。

类似的东西是PAX插件

如果您拥有Eclipse的m2 maven插件,那么其中任何一个都可以很好地工作。

更新:在我的公司,我们努力成为尽可能的TDD,因此在没有明确启动Karaf的情况下完成了很多开发。在正常的单元测试组合中,我们还使用Pax Exam,即使在Eclipse中运行,这在很大程度上也非常棒=)

这有助于确保我们不会太倾向于任何Karaf细节,因为它与Equinox / Felix / Concierge一起运行(所以我模拟了我们依赖的各种Karaf细节,如JAAS身份验证)。除了许多其他很酷的工具/功能外,它还能够配置Karaf功能,并使用TinyBundles,您甚至可以动态创建捆绑包(对于嘲笑/存根也很有用)。

Pax Exam通过提供JUnit@Runner与JUnit框架挂钩,最新版本(2)要快得多,并且具有基于DSL的API,因此测试非常简洁易读。

使用Pax考试为我们提供了良好的测试覆盖率和较短的开发时间。如果测试不太实用,或者我们正在搜索测试中没有出现的错误,则 dev:watch 命令非常宝贵。

总之;IMO你绝对应该通过测试来推动你的开发(Pax Exam将很好地插入到你现有的构建中,一旦你习惯了它,你会发现开发更快)。你可以立即开始使用 dev:watch 命令,它肯定会加快你当前的情况。

更新2:在回答另一个问题时,我添加了一个专家示例Pax-Exam测试组件工厂。测试驱动开发可以说是当今开发人员可用的最高效的工作流程。链接到问题:osgi:使用ServiceFactories?并链接到源代码:http://dl.dropbox.com/u/2465717/net.earcam.example.servicecomponent_2011-08-16_15-52.tgz


答案 2

我在Eclipse中使用Equinox取得了出色的结果 - 即使是热代码替换也可以正常工作。当然,目标平台很小,我们只有大约50个自己的捆绑包,但工作流程是这样的:

首先,我们有一个包含所有第三方和Eclipse捆绑包的目标平台,Eclipse负责下载和管理它们。然后,工作区具有项目的所有捆绑包,这些捆绑包分组为 3-4 个工作集。编译像往常一样在保存时进行,有时GWT需要重新编译,但即使这样,更改也会立即被拾取,因为不需要进行任何部署 - 正在运行的Equinox系统使用解压缩的项目文件夹作为捆绑包。从Eclipse内部运行它为我们提供了热代码替换,动态更改模板文件,只有MANIFEST。MF/plugin.xml更改需要刷新捆绑包 - 即使这样,重新启动框架通常比在控制台中键入内容更快。


推荐