我正在使用一个Eclipse RCP项目。目前,我们创建了一个dependencies
插件项目,并将所有jar包放入该项目并导出所有包。这个方法会给出一个巨大的回购,因此我们想要使用Tycho/Maven并让它找出我们的依赖关系。使用Tycho/Maven删除Eclipse RCP中的jar依赖项的最佳实践是?
第一种方法是删除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
项目中的所有罐子,但在Require-Bundle
或Import-Package
中添加它们。但是,两者都不行,因为在Export-Package
部分,Eclipse会抱怨这些软件包不存在。因此,其他项目依赖于此dependencies
项目将找不到它们需要的那些包,这在Eclipse中导致更多错误。
有谁知道处理这个问题的最佳做法?
更新:
我使用的基本上是第一种方法,但在每一个项目,而不是Require-Bundle
添加依赖于Import-Package
。这将消除指定特定包版本的需要,只要它们提供相同的API并且它们是兼容的,那么应用程序就可以工作。所以每次我更新私人p2存储库,我不需要在每个项目中更改MANIFEST.MF
。
唯一MANIFEST.MF
我需要Require-Bundle
手动添加的依赖是我们自主开发的库。没有它,Tycho将不会从私有p2存储库获取所需的依赖关系。如果仍然得到NoClassDefFoundError
,尝试添加所有插件在运行 - >运行配置.. - >插件,它可能会有所帮助。
创建一个包含所有相关罐子的项目的目的是什么?难道你不能使用feature.xml吗? – nbz
你所描述的可能是可行的 - 但你做错了什么。然而你的描述太模糊了,我们只能猜测。请添加更多详情,例如舱单 – oberlies