使用Tycho / Maven删除Eclipse RCP中的jar依赖项的最佳实践?

时间:2013-07-15 20:03:27

标签: eclipse maven eclipse-plugin eclipse-rcp tycho

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

第一种方法是删除dependenciec项目并使用p2-maven-pluging将现有的jar库转换为p2格式的repo。从p2 repos安装所有库,并在每个Require-Bundle的{​​{1}}部分中添加所需的包。这有点单调乏味,因为在MANIFEST.MFdependencies的每个项目中,我必须手动将其替换为相应的包名称。最后,使用Tycho的项目构建可以成功运行,但在Eclipse中它给了我Require-Bundle

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

第二种方法是删除java.lan.NoClassDefFoundError: Could not initialize class X项目中的所有广告,但在dependenciesRequire-Bundle中添加这些广告。但是,由于在Import-Package部分Eclipse都会抱怨这些包不存在,因此两者都无法工作。因此,其他项目取决于这个Export-Package项目无法找到他们需要的软件包,这会导致Eclipse中出现更多错误。

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


更新

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

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

1 个答案:

答案 0 :(得分:0)

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

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

要获得捆绑包,将出现在Export:Package部分Eclipse中:

  • 如果它们是非Eclipse(maven库),则构建项目并引用Eclipse运行时部分中的库。
  • 如果它们是Eclipse依赖项,它们应该在您的工作区或目标平台中。

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