在使用Maven开发OSGi应用程序时,我应该首先使用POM还是首先使用MANIFEST?

时间:2012-07-07 07:04:32

标签: maven osgi tycho maven-bundle-plugin

使用Maven开发OSGi应用程序时有两种主要方法:首先是POM,首先是MANIFEST。

我正在寻找一个表格形式的答案,显示每种方法的优缺点。

更具体地说,我也想知道它与它的关系:

  • 工具集的成熟度
  • 供应商独立
  • 开发方便(包括找到可以在工具上进行开发的人员)
  • 兼容性
  • 避免ClassNotFound
  • 避免手工作业

3 个答案:

答案 0 :(得分:18)

目前这是我能想到的

POM-First Pros(使用maven-bundle-plugin)

  • 利用现有的Maven技能,存储库和工具。
  • 可能更容易找到知道如何管理pom.xml而不是MANIFEST.MF和pom.xml的人
  • MANIFEST.MF中的大部分信息都可以从pom.xml本身获得。
  • 可以使用其他IDE而不仅仅是基于Eclipse的IDE。
  • 侵入性较小,只需添加单个插件并将包装类型更改为“捆绑”

POM-First Cons

  • ClassNotFoundException更有可能在运行时发生。但是,这可以通过pax-exam来缓解(尽管设置非常复杂)。
  • 仍然需要了解如何设置MANIFEST以确保正确设置instructions配置元素。

MANIFEST-first Pros(使用tycho-maven-plugin)

  • 似乎是推荐的方法,或者至少被称为推荐的方法,但我不明白为什么它有显着的好处。 (因此,为什么要问这个问题)。
  • 适合开发Eclipse插件并与PDE良好集成
  • 提供测试工具,从而允许在JUnit测试期间显示ClassNotFoundException而不是运行时。

MANIFEST-first Cons

  • 似乎只能在基于Eclipse的IDE上运行良好。你不必使用Eclipse,但是你不想使用PDE吗?
  • 违反DRY原则,因为我必须将POM和MANIFEST.MF中的名称和版本保持同步。
  • 需要以特定方式命名事物
  • 您无法混合,这意味着现有的Maven多项目安装不能仅仅支持OSGi支持
  • 与maven-bundle-plugin相比,需要更多配置才能获得更少的警告:http://wiki.eclipse.org/Tycho/Reference_Card#Examplary_parent_POM
  • 必须将测试用例作为单独的项目。在src / test / java中构建时不会运行。
  • 似乎它只会测试暴露的类,换句话说就是“.internal”中的类。是不可测试的。

如果我被要求为已经使用Maven并希望转移到OSGi的企业提出建议,那么它将首先是POM

如果我被要求为正在进行Eclipse插件开发的人推荐,那么它首先是 Manifest - 使用tycho

答案 1 :(得分:5)

我认为您应该根据用例进行选择。对于服务器端OSGi项目,我赞成pom第一种风格。它很好地匹配maven构建,并且比Manifest首先更容易出错。 实际上,mand bundle插件背后的bnd在没有任何额外配置的情况下获得了大多数情况下的Manifest。诀窍是使用一些命名规则。例如,如果您将内部包名称impl或内部命名,则不会导出。使用这种风格你不能使用Eclipse插件透视图(至少没有我不喜欢的bndtools),但我还没有错过这个观点。我是Apache Karaf,CXF和Camel项目的开发人员,我们使用这种风格,效果很好。特别是对于CXF和Camel,我们可以使用相同的构建和工具来支持OSGi和非OSGi部署。

对于Eclipse RCP应用程序Manifest首先是您需要插件透视图和Eclipse IDE工具的方法。如果你想把它与maven结合起来,那么tycho可能就是你要走的路。

答案 2 :(得分:0)

MANIFEST首先不会把你锁定到Eclipse(虽然如果超过一小部分人会使用其他任何东西我会感到惊讶)。 MANIFEST是一个重要的文件,需要添加到jar中,无论你怎么做。

另一方面,POM首先完全锁定你到Maven,你失去了一个优势,即OSGi包是一个普通的jar,你可以按照你想要的任何方式。

我试过了两个,我真的更喜欢MANIFEST。 MANIFEST文件是一个非常重要的文件,我更喜欢制作该文件而不是制作生成该文件的文件。如果发生了奇怪的事情,(并且它会在某些时候)MANIFEST文件是第一个检查的,如果它是你自己的文件就更容易了。此外,无论如何你必须熟悉它。

所以,如果Maven是你的alpha和omega,POM首先会最适合你,但你仍然需要深入了解MANIFEST文件。