我们已经将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。它们必须以正确的顺序构建。我意识到我可以手动控制构建顺序,我正在寻找一种工具来帮助自动化构建顺序依赖关系管理。
Maven2一路走来;有一个名为的Eclipse插件 m2eclipse的 帮助管理它,完全解决依赖问题,然后解决一些问题。有一个 免费在线图书作为文档。
具体看看 多模块项目 将许多组件捆绑在一起,让Maven解决构建顺序和依赖关系。
还有一个 关于Eclipse集成的章节。
那就是Eclipse和Maven,接下来你会为OSGi获得一些很酷的东西:
从根本上说,Maven模块模型完全符合OSGi的捆绑模型。我们使用Maven已经使用Maven构建和管理多个产品已经超过3年了,而且非常棒。
我们用 巴克明斯特。它是一个构建和组装框架,负责解决依赖关系,从各种存储库中获取,构建和打包产品。
这是一个Eclipse Tools项目。它与PDE很好地集成。
这意味着我们用于构建RCP的所有元数据对Buckminster解析和构建都很有用。例如,在Manifest.MF,.product中的feature.xml和Require-Bundle标头。
我们现在没有在每个包中都有任何构建脚本;我们现在每个产品都有一个版本。 Buckminster负责处理依赖图。
尽管他们(Buckminster团队)已经开始使用Hudson来主持项目本身,但我们现有的巡航控制/蚂蚁系统需要花费一些精力才能使用它。我相信他们的构建设置也可以下载。
我们对它印象深刻,尽管它相对不足。
我们也调查了一下 PAX-构建 但我们不想使用Maven。
我们目前也在关注 Spring DM测试框架 增加单元测试工作量。
借调Maven2。查看用于构建的Tycho插件 - 它们使用Eclipse的JDT编译器,因此它在编译时实现所有OSGi规则,就像Eclipse在运行时一样。
或者,Apache Felix BND插件似乎也很受欢迎。我更喜欢Tycho,因为它更接近于统一Maven和Eclipse开发环境。
结束一些旧问题......
由于缺乏网络连接和时序,我们的设置不利于maven。我知道有离线maven设置,但考虑到时间太多了。希望在我们有时间重新组织构建过程时,我们将使用正确的设置。
该解决方案涉及Ant,BND和一些自定义ant任务。手动管理各种捆绑依赖项。我们已经在使用Ant; BND和自定义任务将它们捆绑在一起。自定义任务只是确保我们的bnd / eclipse项目是同步的。
PDE无头构建。 Eclipse已有很好的文档记录。如果您正在构建Eclipse插件,并且您希望通过命令行来完成,那么Eclipse PDE无头构建是可行的方法。
你能详细说明问题出在哪里吗?您提到OSGi捆绑依赖项。这是在运行时吗?还是在编译期间?在第一种情况下,您应该考虑声明性服务(请参阅OSGi规范)。
我们使用Hudson结合 PluginBuilder 构建基于Eclipse的OSGi包/插件。这构建于Eclipse的标准PDE流程之上,用于构建插件。这意味着使用Eclipse作为编译器。
Maven不需要互联网连接!为基督的缘故,使用-o开关。
我使用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>