Eclipse plugin 与x27之间的不一致;使用';和';进口包装';

Eclipse plugin 与x27之间的不一致;使用';和';进口包装';,eclipse-plugin,osgi,osgi-bundle,bnd,bndtools,Eclipse Plugin,Osgi,Osgi Bundle,Bnd,Bndtools,我正在使用bnd为库生成MANIFEST.MF。最后,我得到了一份清单,其中包含以下冲突: Export-Package: A;uses:="B,C" Import-Package: B 包A、B、C都位于单独的插件中,也称为A、B和C。在运行时,Eclipse不会加载pluginC,所以我会崩溃。此外,Eclipse工具似乎只查看导入包,因为该工具也不知道对C的依赖性 Import-Package是否应始终包含uses语句中的所有包?是Eclipse bug,还是(更有可能)我在bnd上犯

我正在使用bnd为库生成
MANIFEST.MF
。最后,我得到了一份清单,其中包含以下冲突:

Export-Package: A;uses:="B,C"
Import-Package: B 
A
B
C
都位于单独的插件中,也称为
A
B
C
。在运行时,Eclipse不会加载plugin
C
,所以我会崩溃。此外,Eclipse工具似乎只查看
导入包
,因为该工具也不知道对
C
的依赖性

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

对于您的问题:

导入包是否应始终包含使用中的所有包 陈述这是一个Eclipse bug,还是(更有可能)我在做什么 bnd的错误导致它错过了对C的依赖

答案是:

通过导入,您可以声明捆绑包需要哪些软件包;通过导出,您可以声明将哪些软件包分发给其他捆绑包。uses是一个提示,提示解析器需要包a的导入包也需要导入包B和C。 这使得解析机制更容易找到合适的bundle。特别是因为导出A的捆绑包也需要导入B,但不需要导入C

澄清问题:

看来进口包装应该包含所有使用的东西,我很抱歉 试图理解一个不可能的场景

捆绑包A是您的捆绑包,导出我的打包包A 它使用Bundle b中的package.b.package,因此将其导入。 这就是这里的简单内容。现在,既然您导出了我的.a.包bnd,那么也为您分析了B包。 因为您没有显式地使用Bundle C中的任何类,所以不会导入这些类。
但是由于bnd为您分析了Bundle B,它知道Bundle C中的包被用作B中的可传递依赖项。

您能提供给bnd的配置吗?我正在使用一个名为的Gradle插件,它会自动为我调用bnd。我还没有深入挖掘unpuzzle,因为我甚至不确定MANIFEST.MF应该是什么样子。我的直觉是,
Import包
应该包含所有的
用法
指令,但我想在花时间研究unpuzzle之前确认一下。没有进一步的细节,你可能不会得到任何有用的答案。你能在github上提供一个小项目来说明你的问题吗?那么如果a使用B和C,但它只导入B,那么它打算如何获得C?那么你看到的实际效果是什么?ClassNotFound异常?
java.lang.NoClassDefFoundError:C
java.lang.ClassNotFoundException:C
引起。我做了一个小测试项目来重现这个问题,但构建太深了(wuff调用unpuzzle调用BND为我使用的第三方jar生成MANIFEST.MF,而这个MANIFEST.MF具有我正在描述的问题类别)。我的目标是在我假设它是错误的之前理解MANIFEST.MF的意义。似乎
导入包
应该包含
uses
中的所有内容,我试图理解一个它不会包含的场景。只是要弄清楚,uses并不意味着导入包!uses约束仅用于帮助框架的解析器,用于查看解决依赖关系的“使用”方向。除此之外。