如何管理OSGi构建依赖项?

时间:2008-08-26 11:54:35

标签: dependencies osgi build

我们已经将OSGi运行时(Equinox)嵌入到自定义客户端 - 服务器应用程序中以促进插件开发,并且到目前为止事情进展顺利。由于内置的​​清单编辑器,依赖关系管理和导出向导,我们一直在使用Eclipse来构建插件。使用Eclipse管理构建不是非常有利于通过Hudson进行持续集成。

我们有依赖于其他OSGi包的OSGi包。我真的很讨厌在自定义ANT构建中硬编码构建顺序。我们这样做是过去而且非常可怕。是否有任何构建工具可以轻松管理OSGi依赖项,如果不自动解决它们?是否有任何DECENT示例如何做到这一点?

澄清:

生成的构建脚本只能通过Eclipse使用。它们需要手动运行Eclipse。我们还有一些Eclipse构建不会有的标准目标,我不想修改生成的文件,因为我可以重新生成(我知道我可以做包含,但我想避免Eclipse gen文件全部一起)

这是我的项目布局:

/
-PluginA
-PluginB
-PluginC
.
.
.

在使用Eclipse PDE时,每个插件都有一个Manifest,但没有build.xml,因为PDE为我做了这个。 Hudson难以自动化gui驱动的流程。我想设置自己的build.xml来构建每个,但是存在依赖关系和构建顺序问题。这些问题由Manifest文件(描述OSGi导入)驱动。例如,PluginC依赖于PluginB,它依赖于PluginA。它们必须以正确的顺序构建。我意识到我可以手动控制构建顺序,我正在寻找一种工具来帮助自动化构建顺序依赖关系管理。

9 个答案:

答案 0 :(得分:7)

Maven2一路走来;有一个名为m2eclipse的Eclipse插件来帮助管理它,解决了依赖性问题,然后解决了一些问题。有一个free online book as documentation

具体看multi-module projects将多个组件捆绑在一起,让Maven计算构建顺序和依赖关系。

还有chapter on the Eclipse integration

那就是Eclipse和Maven,接下来你会为OSGi获得一些很酷的好东西:

从根本上说,Maven模块模型非常适合OSGi的捆绑模型。我们使用Maven已经使用Maven构建和管理多个产品已经超过3年了,而且非常棒。

答案 1 :(得分:2)

借调Maven2。查看用于构建的Tycho插件 - 它们使用Eclipse的JDT编译器,因此它在编译时实现所有OSGi规则,就像Eclipse在运行时一样。

另外,Apache Felix BND插件似乎也很受欢迎。我更喜欢Tycho,因为它更接近于统一Maven和Eclipse开发环境。

答案 2 :(得分:1)

我们使用Buckminster。它是一个构建和组装框架,负责解决依赖关系,从各种存储库获取,构建和打包产品。

这是一个Eclipse Tools项目。它与PDE很好地集成。

这意味着我们用于构建RCP的所有元数据对Buckminster的解析和构建都很有用。例如,在Manifest.MF,.product。

中的feature.xml和Require-Bundle标头

我们现在每个捆绑包中都没有任何构建脚本;我们现在每个产品都有一个版本。 Buckminster负责处理依赖图。

我们现有的巡航控制/蚂蚁系统需要花费一点点力气,尽管他们(Buckminster团队)已经开始使用Hudson来主持项目本身。我相信他们的构建设置也可以下载。

我们对此印象深刻,尽管它相对处于初期阶段。

我们也调查了Pax-Construct,但我们不想使用Maven。

我们目前还在考虑Spring DM testing framework以增加单元测试工作量。

答案 3 :(得分:1)

结束一些旧问题...

由于缺乏网络连接和时间安排,我们的设置不利于maven。我知道有离线maven设置,但考虑到时间太多了。希望在我们有时间重新组织构建过程时,我们将使用正确的设置。

解决方案涉及Ant,BND和一些自定义ant任务。手动管理各种捆绑依赖项。我们已经在使用Ant; BND和自定义任务将它们捆绑在一起。自定义任务只是确保我们的bnd / eclipse项目同步。

答案 4 :(得分:1)

PDE无头构建。 Eclipse已有很好的文档记录。如果您正在构建Eclipse插件,并且您希望通过命令行来完成,那么Eclipse PDE无头构建是可行的方法。

答案 5 :(得分:0)

请详细说明问题出在哪里?您提到了OSGi捆绑依赖项。这是在运行时吗?还是在编译期间?在第一种情况下,您应该考虑声明式服务(参见OSGi规范)。

答案 6 :(得分:0)

我们使用Hudson结合PluginBuilder来构建基于Eclipse的OSGi包/插件。这构建于Eclipse的标准PDE流程之上,用于构建插件。这意味着使用Eclipse作为编译器。

答案 7 :(得分:0)

我使用maven 3.0.2

mvn generate:archetype

select 252 - osgi-archetype
mvn idea:idea

请参阅http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

将依赖项添加到bundle中使用pom.xml中的这个简短示例

<Export-Package>org.foo.myproject.api</Export-Package>

<Import-Package>org.foo.myproject.api</Import-Package>

答案 8 :(得分:0)

Maven不需要互联网连接!出于基督的缘故,请使用-o开关。