我正在使用bnd为库生成MANIFEST.MF
。最后,我得到了以下冲突的清单:
Export-Package: A;uses:="B,C"
Import-Package: B
包A
,B
,C
都位于单独的插件中,也称为A
,B
和C
。在运行时,Eclipse不会加载插件C
,因此我崩溃了。此外,Eclipse工具似乎只查看Import-Package
,因为工具也不知道对C
的依赖。
Import-Package
是否应始终包含uses
语句中的所有包?这是一个Eclipse错误,还是(更有可能)我在做什么错误导致它错过了对C的依赖?
答案 0 :(得分:1)
对于你的问题:
Import-Package是否应始终包含用途中的所有包 声明?它是一个Eclipse bug,还是(更有可能)我在做什么 错误的bnd会导致它错过对C的依赖吗?
答案是:否。
使用导入,您将声明捆绑包需要哪些包,并通过导出声明您将哪些包提供给其他捆绑包。用途是解析器的提示,需要包A的Importing Bundle也需要导入包B和C. 这使得解析机制更容易找到合适的包。特别是因为导出A的bundle也需要导入B而不是C.
澄清问题:
看起来Import-package应该包含所有用途,我是 试图理解它不会的情况。
捆绑包A是您的捆绑包并导出包my.a.package 它使用来自Bundle B的package.b.package,因此导入它。 这是一个简单的东西。既然你导出my.a.package bnd也为你分析了Bundle B. 由于您未明确使用Bundle C中的任何类,因此不会导入这些类。 但是因为bnd为你分析了Bundle B,它知道Bundle C中的包被用作B中的传递依赖。