【问题标题】:The best practice to use Tycho/Maven to remove jars dependencies in Eclipse RCP?使用 Tycho/Maven 删除 Eclipse RCP 中的 jars 依赖项的最佳实践?
【发布时间】:2013-07-13 19:50:14
【问题描述】:

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

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

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

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

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


更新:

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

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

【问题讨论】:

  • 创建一个包含所有依赖 jar 的项目的目的是什么?你不能改用 feature.xml 吗?
  • 您所描述的可能是可行的 - 但您做错了什么。但是你的描述太模糊了,我们只能猜测。请添加更多详细信息,例如清单

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


【解决方案1】:

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

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

获取包会出现在Eclipse的Export-Package部分:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 2012-07-20
    • 2011-10-15
    • 2018-05-16
    • 1970-01-01
    • 2019-08-24
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多