1

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

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

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

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

有谁知道处理这个问题的最佳实践?


更新:

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

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

4

1 回答 1

0

我绝对不会使用您的方法 1,使用大型导出插件。这里有一个相关的讨论:Handling non-OSGi dependencies when integration Maven, Tycho and Eclipse

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

获取捆绑包将出现在 Eclipse 的 Export-Package 部分:

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

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

于 2014-04-05T16:04:08.977 回答