我的工作是开发一个由多个捆绑包组成的产品,这些捆绑包在karaf之上运行。通常,我们的开发人员一次只处理一个捆绑包。我们通常的开发是这样的:编码、编译、将包复制到部署文件夹、测试。我们还发现,hotdeploy只是拒绝覆盖某些作为功能安装的包,而无需重新启动服务器或卸载/重新安装功能,因此有时周期会更长。
我的问题是:社区中有没有人有更好的方法?我们做事情的方式是有效的,但我觉得它很慢,效率很低,我打赌肯定有人想出了更好的方法!
编辑:我意识到我的问题很不清楚……我们在Karaf下面使用Equinox。我们也使用Eclipse和Maven,尽管我不知道使用Maven是否相关。
发布于 2011-08-01 16:10:39
听起来您需要使用dev:watch命令。从文档中:
命令可用于在开发时提供帮助。它允许您配置一组将被监控的URL。所有与给定URL匹配的捆绑包位置都将自动更新。这就避免了手动更新捆绑包,甚至在需要时将捆绑包复制到系统文件夹。请注意,实际上只有基于maven的urls和maven快照会自动更新,所以如果您运行
dev:观看*
它将实际监控所有的捆绑包,这些捆绑包的位置与mvn:*匹配,它们的url中有'-SNAPSHOT‘。
在Karaf shell中执行"dev:watch --help“将列出它的可用标志和参数。
与之类似的是PAX plugin
如果您有用于m2的Eclipse插件,那么这两个插件都可以很好地工作。
更新:在我的公司,我们努力成为尽可能的TDD,因此很多开发都是在没有明确启动Karaf的情况下完成的。在普通的混合单元测试中,我们也使用了Pax Exam,即使在Eclipse =)中运行它也是非常棒的。)
这有助于确保我们在使用Equinox/Felix/Concierge (所以我模拟了我们所依赖的各种Karaf细节,如JAAS身份验证)时,不会对任何Karaf细节过于敏感。与许多其他很酷的工具/功能一起,它能够提供Karaf特性,并且使用TinyBundles,您甚至可以动态创建包(这对于模拟/存根也很有用)。
Pax Exam通过提供DSL @Runner连接到JUnit框架,最新的版本(2)速度更快,并具有基于JUnit的应用编程接口,因此测试非常简洁和可读。
使用Pax Exam为我们提供了良好的测试覆盖率和较短的开发时间。在测试不太实用的地方,或者我们在寻找测试中没有出现的bug时,dev:watch命令是无价的。
总之,你绝对应该用测试来驱动你的开发(Pax Exam将很好地嵌入到你现有的构建中,一旦你习惯了它,你会发现开发更快)。您可以立即开始使用dev:watch命令,它肯定会加速您当前的情况。
更新2:在回答另一个问题时,我添加了一个maven示例Pax-Exam testing a ComponentFactory。测试驱动开发可以说是当今开发人员可用的最有效的工作流程。链接到问题:osgi: Using ServiceFactories?和链接到源代码:http://dl.dropbox.com/u/2465717/net.earcam.example.servicecomponent_2011-08-16_15-52.tgz
发布于 2011-07-30 08:44:10
我在Eclipse中使用Equinox获得了很好的结果--即使是热代码替换也能正常工作。诚然,目标平台很小,我们只有大约50个自己的捆绑包,但工作流程是这样的:
首先,我们有一个包含所有第三方和Eclipse包的目标平台,Eclipse负责下载和管理它们。然后,工作区拥有项目的所有捆绑包,分组为3-4个工作集。编译在保存时照常进行,有时GWT需要重新编译,但即使这样,更改也会立即生效,因为不需要进行部署-正在运行的Equinox系统使用解压的项目文件夹作为包。在Eclipse中运行它可以快速替换代码,动态更改模板文件,只需对MANIFEST.MF/plugin.xml进行更改即可刷新捆绑包--即便如此,只需重新启动框架通常也比在控制台中键入更快。
发布于 2012-04-25 06:55:48
如果你使用Eclipse,Eclipse Libra可能会对你有用。Libra可以在Eclipse中启动Felix、Equinox和Knopflerfish,就像使用WST的任何其他服务器一样。他们在youtube上有一些如何使用它的视频。
我还写了一些可以帮助你的工具:
osgi
的maven repo或JUnit目录下
如果将项目部署到服务器上(Eclipse Libra),我只能说只更新X,其中X是包的id,并且所有内容都会快速刷新。如果您在Libra中运行Equinox,则不必重新编译发布到服务器的项目,因为它指向目标类文件夹,该文件夹会在您保存类或pom.xml时立即刷新。
如果您不将项目发布到服务器上,而是将其作为包添加到指向快捷方式文件夹的容器中,则还可以在运行mvn install之后在OSGi控制台上运行更新命令(无需重启服务器)。
在http://cookbook.everit.org/上可以找到分步指南
使用上面的方法,可以将测试作为TDD测试编写,并在CI服务器上作为maven编译的一部分运行。
我希望你会发现这些工具和我一样有用!
https://stackoverflow.com/questions/6880238
复制相似问题