2012-07-07 72 views
17

使用Maven开发OSGi应用程序有两种主要方法:首先是POM-first和MANIFEST。在使用Maven开发OSGi应用程序时,我应该首先使用POM还是首先使用MANIFEST?

我正在寻找一个表格显示每种方法的利弊的答案。

更具体地讲,我也想知道它是如何涉及到:

  • 工具集的成熟度
  • 供应商独立
  • 发展方便(包括找人,谁可以做开发所述工具)
  • 兼容性
  • 避免ClassNotFound的
  • 避免手工工作
+0

“我们在这里播放两种音乐...国家*和*西方。”换句话说,你已经提出了一个错误的二分法,并且有比“首先POM”和“首先MANIFEST”更多的选择。特别是你看过Bndtools IDE吗? – 2012-07-07 09:15:35

+1

这个问题显然属于征求辩论和争辩的范畴,应该关闭。 – Robin 2012-07-09 13:42:39

+0

我只知道处理这个问题的两种方法:maven-bundle-plugin和tycho-maven-plugin。我正在将Eclipse插件转换为使用Tycho,所以我有一个“真正”的理由来使用它。我的参考OSGi应用程序不是基于Eclipse的使用Felix。到目前为止,我在使用Tycho时看到了更多的缺点。 – 2012-07-17 10:30:00

回答

17

目前这是我能想出

POM-第一优点(使用maven-捆插件)

  • 利用现有的Maven的技能,资源库和工具。
  • 可能更容易找到知道如何管理pom.xml而非MANIFEST.MF以及pom.xml的人
  • MANIFEST.MF中的大多数信息都可以从pom.xml本身获取。
  • 可以与其他IDE一起使用,而不仅仅是基于Eclipse的。
  • 微创,只需添加单插件和改变包装类型为 “束”

POM-首先缺点

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

Manifest优先的优点(使用第谷 - Maven的插件)

  • 好像是推荐的方法,或者至少谈到作为推荐的方法,但我实在看不出为什么它有显着的好处。 (因此为什么问这个问题)。
  • 适合开发Eclipse插件与PDE很好地集成
  • 为测试从而使ClassNotFoundException的JUnit测试,而不是在运行时出现的工具。

Manifest优先的缺点

  • 似乎只对基于Eclipse的IDE很好地工作。你不必使用Eclipse,但没有你想要的PDE?
  • 违反DRY原则,因为我必须将POM和MANIFEST.MF的名称和版本保持同步。
  • 需要以特定的方式来命名的东西
  • 您不能混用,这意味着现有的Maven多项目设施不能只是钉在OSGi的支持
  • 更多的配置相比,Maven的捆绑,插件有很多是需要得到较少警告:http://wiki.eclipse.org/Tycho/Reference_Card#Examplary_parent_POM
  • 必须使测试用例成为一个单独的项目。它在src/test/java中生成时不会运行。
  • 似乎它只会测试暴露的类,换句话说就是“.internal”中的类。不可测试。

如果有人问我对于一个已经使用Maven,并希望移动到OSGi的企业的建议那么这将是POM第一

如果有人问我为别人的建议是谁做Eclipse插件开发,然后它是首先清单 - 与tycho

+0

有没有办法从MANIFEST.MF生成POM依赖关系? – 2017-09-13 16:10:00

0

MANIFEST首先不锁定你到Eclipse(虽然我会很惊讶,如果超过一小部分人会使用其他任何东西)。 MANIFEST是重要的文件,需要添加到jar文件中,无论你如何做。另一方面,POM首先将你完全锁定到Maven,你失去了OSGi包是一个普通的jar的优点,你可以用任何你想要的方式。

我已经试过两种,我真的首选MANIFEST。 MANIFEST文件是一个非常重要的文件,我更喜欢通过制作生成该文件的文件来制作该文件。如果有些奇怪的事情发生,(它会在某个时候)清单文件是第一个检查,如果它是你自己的文件,它会更容易。此外,无论如何你都必须熟悉它。所以,如果Maven是你的alpha和omega,POM首先会适合你最好的,但是你仍然需要对MANIFEST文件有深入的理解。

+3

我不能不同意这个立场,因为它包含了太多重复的信息(例如导入的包),所以生成MANIFEST比手动维护它好得多。关于它非常重要的论点是假的,因为应用程序中的'.class'文件也非常重要,而且你不会想用手写这些文件。 – 2012-07-07 09:13:52

+0

有趣。我不反对生成一个MANIFEST文件,我只是说你确实需要熟悉它。通过查看MANIFEST文件可以解决或分析出现在stackoverflow上的许多问题。我从来没有见过任何人请求字节码。这两者确实有不同的作用。无论如何,我期待着你的回答。 – 2012-07-07 09:32:45

+1

是的..你必须知道你的Manifest应该是什么样子。当您生成清单时,您仍然需要检查它是否正常工作,但是您的手动工作量要少很多。所以我也支持产生Manifest。 – 2012-07-19 14:11:55

5

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

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

+0

我发现确切的事情是一样的。我也用两种方法开发,并在适当的时候继续这样做。这就是为什么我们使用Tycho作为我们的RCP代码的原因,所以我们仍然可以使用maven,但是通过使manifest成为王者,它可以让Eclipse更容易地开发RCP。 – Robin 2012-07-09 13:41:16

+0

谢谢,你的结论与我的结论相符,其实你的结论就是我在写这个问题之前所想的。问题的原因是要列出每个人的利弊,以便我必须证明为什么我选择了一个。 – 2012-07-19 05:09:13

相关问题