我正在开发一个 Eclipse RCP 项目。目前我们创建了一个dependencies
插件项目并将所有的jar库放入该项目并导出所有包。这个方法会提供一个巨大的 repo,因此我们想使用 Tycho/Maven 并让它为我们找出依赖关系。
第一种方法是删除dependenciec
项目并使用p2-maven-pluging将现有的 jars 库转换为 p2 格式的 repo。从 p2 存储库安装所有库,并Require-Bundle
在每个MANIFEST.MF
. 这有点乏味,因为在每个具有dependencies
in的项目中Require-Bundle
,我都必须手动将其替换为相应的包名称。最后,使用 Tycho 构建的项目可以成功运行,但在 Eclipse 中它给了我java.lan.NoClassDefFoundError: Could not initialize class X
.
我认为配置文件很少,Tycho 依赖于其中的一些,而 Eclipse 依赖于其余的,但我不确定它是什么。
第二种方法是删除dependencies
项目中的所有 jar,但将它们添加到Require-Bundle
or中Import-Package
。但是,两者都不起作用,因为在Export-Package
Eclipse 部分会抱怨这些包不存在。因此依赖于该dependencies
项目的其他项目将找不到他们需要的那些包,这导致Eclipse中的错误更多。
有谁知道处理这个问题的最佳实践?
更新:
我基本上使用第一种方法,但Import-Package
在每个项目中添加依赖项而不是Require-Bundle
. 这将消除指定特定捆绑版本的需要,只要它们提供相同的 API 并且它们是兼容的,您的应用程序就可以工作。所以每次我更新私有 p2 存储库时,我都不需要MANIFEST.MF
在每个项目中进行更改。
我唯一MANIFEST.MF
需要手动添加依赖项的Require-Bundle
是我们自己开发的库。没有它,Tycho 将不会从私有 p2 存储库中获取所需的依赖项。如果仍然得到NoClassDefFoundError
,请尝试在 Run -> Run Configuration .. -> plugins 中添加所有插件,它可能会有所帮助。