【发布时间】:2013-07-13 19:50:14
【问题描述】:
我正在开发一个 Eclipse RCP 项目。目前我们创建了一个dependencies插件项目,并将所有jars库放入该项目并导出所有包。这种方法会产生巨大的 repo,因此我们想使用 Tycho/Maven 并让它为我们找出依赖关系。
第一种方法是删除dependenciec 项目并使用p2-maven-pluging 将现有的jar 库转换为p2 格式的repo。从 p2 存储库安装所有库,并在每个 MANIFEST.MF 的 Require-Bundle 部分中添加所需的包。这有点乏味,因为在 Require-Bundle 中包含 dependencies 的每个项目中,我必须手动将其替换为相应的包名称。最后,使用 Tycho 构建的项目可以成功运行,但在 Eclipse 中它给了我java.lan.NoClassDefFoundError: Could not initialize class X。
我认为配置文件很少,其中 Tycho 依赖于其中的一些,而 Eclipse 依赖于其余的,但我不确定它是什么。
第二种方法是删除dependencies 项目中的所有jar,但将它们添加到Require-Bundle 或Import-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