如何管理OSGi构建依赖关系?

如何管理OSGi构建依赖关系?

How can I manage OSGi build dependencies?

我们已经将OSGi运行时(Equinox)嵌入到自定义的客户端-服务器应用程序中,以方便插件开发,到目前为止,一切都很好。由于内置的??清单编辑器,依赖项管理和导出向导,我们一直在使用Eclipse构建插件。使用Eclipse进行管理器构建不利于通过Hudson进行持续集成。

我们有依赖于其他OSGi捆绑包的OSGi捆绑包。我真的很讨厌在自定义ANT构建中对构建顺序进行硬编码。我们已经做到了这就是过去,这太可怕了。如果没有自动解决OSGi依赖关系,是否有任何构建工具可以轻松管理OSGi依赖关系?是否有关于此的DECENT示例?

澄清:

生成的构建脚本只能通过Eclipse使用。他们需要手动运行Eclipse。我们还提供了一些Eclipse构建所没有的标准目标,并且我不想修改生成的文件,因为我可能会重新生成(我知道我可以做到包括在内,但是我想避免所有Eclipse gen文件一起)

这是我的项目布局:

1
2
3
4
5
6
7
/
-PluginA
-PluginB
-PluginC
.
.
.

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


一路Maven2;有一个名为m2eclipse的Eclipse插件可以帮助管理它,可以完全解决依赖问题,然后解决一些问题。有一本免费的在线书籍作为文档。

专门研究将多个组件捆绑在一起的多模块项目,并让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开发环境。


PDE无头构建。 Eclipse对其进行了充分的记录。如果您要构建Eclipse插件,并且想通过命令行来实现,那么Eclipse PDE无头构建是您的最佳选择。


解决一些老问题...

由于缺乏网络连接和时间安排,我们的设置不利于Maven。我知道有离线Maven设置,但考虑到时间,一切都太多了。希望当我们有时间重组构建过程时,将使用适当的设置。

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


我们使用巴克敏斯特。这是一个构建和组装框架,负责解决依赖项的解析,从各个存储库中获取数据,构建和包装产品。

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

这意味着我们用于构建RCP的所有元数据对Buckminster进行解析和构建非常有用。例如,feature.xml和Manifest.MF.product中的Require-Bundle标头。

现在每个捆绑包中都没有任何构建脚本。现在,每个产品只有一个版本。 Buckminster小心行走依赖图。

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

尽管它还处于起步阶段,但我们对它确实印象深刻。

我们也研究了Pax-Construct,但是我们不想使用Maven。

我们目前还在寻找Spring DM测试框架,以增加单元测试的工作量。


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


我使用Maven 3.0.2

mvn generate:archetype

1
2
select 252 - osgi-archetype
mvn idea:idea

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

要将您的依赖项添加到捆绑软件中,请使用pom.xml中的此简短示例

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

要么

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

我们将Hudson与PluginBuilder结合使用来构建基于Eclipse的OSGi捆绑软件/插件。这是基于Eclipse的标准PDE流程来构建插件的。这意味着使用Eclipse作为编译器。


您能详细说明出现问题的地方吗?您提到了OSGi捆绑包依赖性。这是在运行时吗?还是在编译时?在第一种情况下,您应考虑声明式服务(请参阅OSGi规范)。


推荐阅读