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

Arc*_*ano 17 osgi tycho maven maven-bundle-plugin

使用Maven开发OSGi应用程序时有两种主要方法:POM-first和MANIFEST first.

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

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

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

Arc*_*ano 19

目前这是我能想到的

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良好集成
  • 提供用于测试的工具,从而允许ClassNotFoundException在JUnit测试期间而不是运行时出现.

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


Chr*_*der 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可能就是你要走的路.