2013-07-15 35 views
1

我正在使用一个Eclipse RCP项目。目前,我们创建了一个dependencies插件项目,并将所有jar包放入该项目并导出所有包。这个方法会给出一个巨大的回购,因此我们想要使用Tycho/Maven并让它找出我们的依赖关系。使用Tycho/Maven删除Eclipse RCP中的jar依赖项的最佳实践是?

第一种方法是删除dependenciec项目并使用p2-maven-pluging将现有的jar文件库转换为p2格式的repo。安装p2仓库中的所有库,并在每个MANIFEST.MFRequire-Bundle部分添加所需的捆绑包。这有点乏味,因为在Require-Bundledependencies的每个项目中,我都必须手动将其替换为相应的包名称。最后,使用Tycho构建的项目可以成功运行,但在Eclipse中,它给了我java.lan.NoClassDefFoundError: Could not initialize class X

我认为几乎没有配置文件,其中Tycho依赖于其中的一些,Eclipse取决于其余部分,但我不确定它是什么。

第二种方法是删除dependencies项目中的所有罐子,但在Require-BundleImport-Package中添加它们。但是,两者都不行,因为在Export-Package部分,Eclipse会抱怨这些软件包不存在。因此,其他项目依赖于此dependencies项目将找不到它们需要的那些包,这在Eclipse中导致更多错误。

有谁知道处理这个问题的最佳做法?


更新:

我使用的基本上是第一种方法,但在每一个项目,而不是Require-Bundle添加依赖于Import-Package。这将消除指定特定包版本的需要,只要它们提供相同的API并且它们是兼容的,那么应用程序就可以工作。所以每次我更新私人p2存储库,我不需要在每个项目中更改MANIFEST.MF

唯一MANIFEST.MF我需要Require-Bundle手动添加的依赖是我们自主开发的库。没有它,Tycho将不会从私有p2存储库获取所需的依赖关系。如果仍然得到NoClassDefFoundError,尝试添加所有插件在运行 - >运行配置.. - >插件,它可能会有所帮助。

+0

创建一个包含所有相关罐子的项目的目的是什么?难道你不能使用feature.xml吗? – nbz

+0

你所描述的可能是可行的 - 但你做错了什么。然而你的描述太模糊了,我们只能猜测。请添加更多详情,例如舱单 – oberlies

回答

0

我绝对不会用你的方法1,用出口的超级插件。这里有一个相关的讨论:Handling non-OSGi dependencies when integrating Maven, Tycho and Eclipse

通常,使用Import-Package而不是Require-Bundle。

要获得束将出现在出口-Package部分的Eclipse:

  • 如果它们是非的Eclipse(行家库),然后将项目构建和引用Eclipse运行时部分库。
  • 如果它们是Eclipse依赖项,它们应该位于工作区或目标平台中。

更一般地说,它可能有助于您定义目标平台。您可以将所有本地创建的插件构建/部署到本地p2存储库(请参阅http://www.sonatype.org/nexus/)。然后将该p2网站添加到您的目标平台。