使用'之间的不一致和' Import-Package'

时间:2015-01-13 01:39:07

标签: eclipse-plugin osgi osgi-bundle bnd bndtools

我正在使用bnd为库生成MANIFEST.MF。最后,我得到了以下冲突的清单:

Export-Package: A;uses:="B,C"
Import-Package: B 

ABC都位于单独的插件中,也称为ABC。在运行时,Eclipse不会加载插件C,因此我崩溃了。此外,Eclipse工具似乎只查看Import-Package,因为工具也不知道对C的依赖。

Import-Package是否应始终包含uses语句中的所有包?这是一个Eclipse错误,还是(更有可能)我在做什么错误导致它错过了对C的依赖?

1 个答案:

答案 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中的传递依赖。