我正在使用 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 错误,还是(更有可能)我在 bnd 上做错了什么,导致它错过了对 C 的依赖?
对于您的问题:
导入包是否应始终包含使用中的所有包 陈述?这是一个Eclipse错误,还是(更有可能)我在做什么 BND有问题,导致它错过了对C的依赖?
答案是:没有。
使用导入,您可以声明您的捆绑包需要哪些包,通过导出,您可以声明将哪些包提供给其他捆绑包。用途是解析程序的提示,需要包 A 的导入包也需要导入包 B 和 C。这使得解析机制更容易找到合适的捆绑包。特别是因为导出 A 的捆绑包也需要导入 B 而不是 C。
澄清问题:
似乎导入包应该包含使用中的所有内容,我是 试图理解一个不会的场景。
捆绑包 A 是您的捆绑包,导出包 my.a.包它使用包 B 中的包 their.b.package,因此导入它。这是这里简单的东西。现在,由于您导出my.a.packagebnd也为您分析捆绑B。由于您没有显式使用捆绑包 C 中的任何类,因此不会导入这些类。但是由于 bnd 为您分析了捆绑包 B,它知道来自捆绑包 C 的包在 B 中用作传递依赖项。