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

Dependencies 如何管理OSGi构建依赖关系?,dependencies,osgi,build,Dependencies,Osgi,Build,我们已经将OSGi运行时(Equinox)嵌入到定制的客户机-服务器应用程序中,以促进插件开发,到目前为止,一切进展顺利。由于内置的清单编辑器、依赖项管理和导出向导,我们一直在使用Eclipse构建插件。使用Eclipse来管理构建对于通过Hudson进行持续集成不是很有帮助 我们有依赖于其他OSGi包的OSGi包。我真的不喜欢在自定义ANT构建中硬编码构建顺序。我们已经这样做了,这已经是过去了,而且非常可怕。如果没有自动解决OSGi依赖关系,是否有任何构建工具可以轻松地管理它们?有没有合适的例

我们已经将OSGi运行时(Equinox)嵌入到定制的客户机-服务器应用程序中,以促进插件开发,到目前为止,一切进展顺利。由于内置的清单编辑器、依赖项管理和导出向导,我们一直在使用Eclipse构建插件。使用Eclipse来管理构建对于通过Hudson进行持续集成不是很有帮助

我们有依赖于其他OSGi包的OSGi包。我真的不喜欢在自定义ANT构建中硬编码构建顺序。我们已经这样做了,这已经是过去了,而且非常可怕。如果没有自动解决OSGi依赖关系,是否有任何构建工具可以轻松地管理它们?有没有合适的例子来说明如何做到这一点

澄清:

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

以下是我的项目布局:

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

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

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

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

我们现在在每个包中都没有任何构建脚本;我们现在每个产品都有一个构建。Buckminster注意遍历依赖关系图

虽然Buckminster团队已经开始使用Hudson来主持项目本身,但我们还是花了一点功夫才让现有的巡航控制/蚂蚁系统与之配合使用。我相信他们的构建设置也可以下载

我们对它印象深刻,尽管它还处于婴儿期

我们也进行了调查,但我们不想使用Maven


我们目前也在考虑增加单元测试工作。

Maven2;有一个Eclipse插件被调用来帮助管理它,精确地解决了依赖性问题,还有一些。他有一个朋友

具体考虑如何将许多组件捆绑在一起,并让Maven确定构建顺序和依赖项

还有一个问题

这就是Eclipse和Maven,接下来您将为OSGi带来一些很酷的东西:

  • 系统将自动生成您的清单,或者至少会帮助您
  • 和他们的Maven插件可以在引导项目、提供启动器等方面提供很大帮助

从根本上说,Maven模块模型与OSGi的捆绑模型完美契合。3年多以来,我们一直在使用Maven构建和管理数百个捆绑包的多个产品,这非常棒。

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

< P>我们使用HudSon结合构建基于Eclipse的OSGi捆绑/插件。这建立在Eclipse构建插件的标准PDE过程之上。这意味着使用Eclipse作为编译器。

支持Maven2。查看用于构建的Tycho插件——它们使用Eclipse的JDT编译器,因此它在编译时实现所有OSGi规则,与Eclipse在运行时的实现方式相同


另外,ApacheFelixBND插件似乎也很受欢迎。我更喜欢Tycho,因为它似乎更紧密地统一了Maven和Eclipse开发环境。

结束了一些老问题

由于缺乏网络连接和时间安排,我们的设置不利于maven。我知道有离线的maven设置,但时间太长了。当我们有时间重新组织构建过程时,希望能够使用适当的设置


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

PDE Headless build。Eclipse对此有很好的记录。如果您正在构建Eclipse插件,并且希望通过命令行来实现,那么EclipsePDE无头构建就是一个不错的选择。

我使用maven 3.0.2

mvn生成:原型

select 252 - osgi-archetype
mvn idea:idea

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

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

org.foo.myproject.api

Maven不需要互联网连接!看在上帝的份上,使用-o开关。

为什么声明性服务不起作用?
<Import-Package>org.foo.myproject.api</Import-Package>