题
我们已将 OSGi 运行时 (Equinox) 嵌入到自定义客户端-服务器应用程序中,以方便插件开发,到目前为止一切进展顺利。由于 Eclipse 内置的清单编辑器、依赖项管理和导出向导,我们一直使用 Eclipse 来构建插件。使用 Eclipse 来管理构建不太有利于通过 Hudson 进行持续集成。
我们有依赖于其他 OSGi 包的 OSGi 包。我真的不想在自定义 ANT 构建中硬编码构建顺序。我们已经这么做了,这已经是过去式了,而且非常可怕。是否有任何构建工具可以轻松管理 OSGi 依赖项(如果不能自动解决它们)?有没有任何不错的例子来说明如何做到这一点?
澄清:
生成的构建脚本只能通过 Eclipse 使用。它们需要手动运行 Eclipse 的各个部分。我们还有一些 Eclipse 构建不会有的标准目标,并且我不想修改生成的文件,因为我可能会重新生成(我知道我可以包含,但我想避免 Eclipse gen 文件全部一起)
这是我的项目布局:
/
-PluginA
-PluginB
-PluginC
.
.
.
在使用 Eclipse PDE 时,每个插件都有一个 Manifest,但没有 build.xml,因为 PDE 为我做了这个。很难用 Hudson 来自动化 GUI 驱动的流程。我想设置我自己的 build.xml 来构建每个,但存在依赖性和构建顺序问题。这些问题是由清单文件(描述 OSGi 导入)驱动的。例如,PluginC 依赖于 PluginB,而 PluginB 又依赖于 PluginA。它们必须按正确的顺序构建。我意识到我可以手动控制构建顺序,我正在寻找一种工具来帮助自动化构建顺序依赖项管理。
解决方案 4
结束一些老问题...
由于缺乏网络连接和时间安排,我们的设置不利于 Maven。我知道有离线 Maven 设置,但考虑到时间太多了。希望当我们有时间重新组织构建过程时,我们能够使用正确的设置。
该解决方案涉及 Ant、BND 和一些自定义 ant 任务。各种捆绑包依赖项是手动管理的。我们已经在使用 Ant;BND 和自定义任务将这一切联系在一起。自定义任务只是确保我们的 bnd/eclipse 项目同步。
其他提示
一路Maven2;有一个名为的 Eclipse 插件 m2eclipse 为了帮助管理它,解决依赖问题等等。有一个 免费在线书籍作为文档.
具体看 多模块项目 用于将许多组件捆绑在一起并让 Maven 确定构建顺序和依赖关系。
还有一个 关于 Eclipse 集成的章节.
这只是 Eclipse 和 Maven,接下来您将获得 OSGi 的一些很酷的东西:
- 这 Apache Felix BND Maven 插件 会自动生成您的清单或至少帮助您
- 这 PAX OPS4J 项目 他们的 Maven 插件可以为引导项目、提供启动器等提供很大帮助
从根本上来说,Maven 模块模型与 OSGi 的捆绑模型完美契合。三年多以来,我们一直在使用 Maven 构建和管理包含数百个捆绑包的多个产品,这非常棒。
借调 Maven2。查看用于构建的 Tycho 插件 - 它们使用 Eclipse 的 JDT 编译器,因此它在编译时实现所有 OSGi 规则,就像 Eclipse 在运行时的方式一样。
另外,Apache Felix BND 插件似乎也很受欢迎。我更喜欢 Tycho,因为它似乎更紧密地统一了 Maven 和 Eclipse 开发环境。
我们用 巴克敏斯特. 。它是一个构建和组装框架,负责解决依赖关系、从各种存储库中获取、构建和打包产品。
这是一个 Eclipse 工具项目。它与 PDE 集成良好。
这意味着我们用于构建 RCP 的所有元数据对于巴克明斯特解析和构建都是有用的。例如,Manifest.MF、.product 中的 feature.xml 和 Require-Bundle 标头。
我们现在每个包中都没有任何构建脚本;我们现在每个产品都有一个版本。巴克敏斯特小心地遍历依赖图。
尽管他们(巴克明斯特团队)已经开始使用 Hudson 来托管该项目,但我们还是花了一点努力才让我们现有的巡航控制/蚂蚁系统与其一起工作。我相信他们的构建设置也可供下载。
尽管它还处于起步阶段,但我们对它印象深刻。
我们还调查了 和平建设 但我们不想使用 Maven。
我们目前也在关注 Spring DM 测试框架 增加单元测试工作。
PDE 无头构建。Eclipse 对此进行了详细记录。如果您正在构建 Eclipse 插件,并且希望通过命令行来完成,那么 Eclipse PDE 无头构建就是您的最佳选择。
能详细说明一下问题出在哪里吗?您提到了 OSGi 包依赖项。这是在运行时吗?还是在编译时?在第一种情况下,您应该考虑声明性服务(请参阅 OSGi 规范)。
我们使用 Hudson 结合 插件生成器 构建我们基于 Eclipse 的 OSGi 包/插件。这建立在 Eclipse 构建插件的标准 PDE 流程之上。这意味着使用 Eclipse 作为编译器。
Maven 不需要互联网连接!看在上帝的份上,使用 -o 开关。
我使用maven 3.0.2
mvn 生成:原型
select 252 - osgi-archetype
mvn idea:idea
看 http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
要将依赖项添加到捆绑包中,请使用 pom.xml 中的这个简短示例
<Export-Package>org.foo.myproject.api</Export-Package>
或者
<Import-Package>org.foo.myproject.api</Import-Package>