今天我被问到在我们当前的OSGi应用程序中使用Maven是否是个好主意。我们使用了Bndtools,因为它使开发变得尽可能简单。即使在应用程序运行期间,Bndtools也会使用OBR来维护其他捆绑包和依赖项解析。
由于Maven广泛传播并且如此受欢迎,大多数人都尝试在OSGi环境中使用它。对我来说,这是两种不同的方法。 OSGi有自己的依赖声明,MANIFEST.MF和Maven是一个pom,你可以在其中声明它们。因此,如果您同时使用它们,则会两次声明依赖项。当然,您可以使用Apache OSGi Maven插件来避免它,Maven负责创建MANIFEST.MF。但Maven存储库并不真正关心捆绑包。因此,您可能会引用非捆绑jar。
当然,使用Maven有一些优点,但将它与OSGi或特别是与Bndtools结合起来真的是一件好事吗?
有人可以提供优点或缺点!有使用两者的实际经验吗?
答案 0 :(得分:8)
我认为,如果你做的任何事情都以Maven为中心,那么Apache Felix Maven插件(顺便说一下,也是基于BND的)是可行的方式。
否则,如果你想使用Maven但不是那么重要,Eclipse Tycho很有意义。 Tycho是一套Maven插件。
使用Tycho,您可以提供从Eclipse到Maven的目标平台,然后它可以通过查看您的MANIFEST和目标平台来解析所有捆绑包。对于Tycho项目,pom.xml文件非常简单,因为它们不包含您的依赖项。
Tycho显然非常以Eclipse为中心。如果您不使用eclipse,我认为它没有多大意义,但有时在现有项目中更容易合并。无论哪种方式,您仍然可以使用Apache Felix Maven插件在部署阶段生成OBR元数据。
答案 1 :(得分:4)
我认为使用Maven和OSGi项目非常有效。您可以使用Felix Maven BND plugin让您的生活更轻松。有了这个,maven可以在本地(或远程)maven存储库中自动生成OBR元数据。这使您可以将maven存储库视为OBR。它使OSGi项目的工作流程与其他项目相同,而且一切都非常无缝且易于使用。
我们在工作中使用它,Maven确实使事情更容易使用。例如,我们使用Maven生成Eclipse项目文件,在CI服务器上运行自动构建,以及创建OBR元数据。
答案 2 :(得分:0)
对于那些现在提出这个问题的人,自最初提出这个问题以来已经过去了很多时间。尼尔·巴特利特(Neil Bartlett)上面提到的Maven工作已经成熟,并且Bnd / Bndtools和Maven之间已经有了很好的集成,其中包括用于Eclipse / Bndtools的m2e连接器。
Neil与蒂姆·沃德(Tim Ward)合着了一张幻灯片:
https://www.slideshare.net/mfrancis/bndtools-and-maven-a-brave-new-world-n-bartlett-t-ward