Osgi Equinox束导入冲突

Osgi Equinox束导入冲突,osgi,bundle,equinox,Osgi,Bundle,Equinox,1) Bundle A重新导出它从Bundle C获得的包com.X 2) 捆绑包B导出包com.X 3) 现在bunlde D同时依赖于A和B bundle D从何处获取包com.X?第一个问题是为什么有两个bundle定义同一个包-这称为拆分包,不建议这样做,因为您可能会遇到阴影问题 使用Import-Package时,运行时将选择bundle A或bundle B来解决包依赖关系,而您无法直接控制这一点(您可以通过在导出上设置强制属性来执行Eclipse人员所做的各种操作) 使用re

1) Bundle A重新导出它从Bundle C获得的包com.X


2) 捆绑包B导出包com.X


3) 现在bunlde D同时依赖于A和B



bundle D从何处获取包com.X?

第一个问题是为什么有两个bundle定义同一个包-这称为拆分包,不建议这样做,因为您可能会遇到阴影问题

使用
Import-Package
时,运行时将选择bundle A或bundle B来解决包依赖关系,而您无法直接控制这一点(您可以通过在导出上设置强制属性来执行Eclipse人员所做的各种操作)

使用
requirebundle
您将得到一个合并的
com.X
包,因此您将看到类型的超集,但我不确定如果您有重叠的类型会发生什么


最简单的方法是首先避免拆分包。

谢谢steven,你的回答很有帮助。您提到:“Eclipse人员通过在导出上设置强制属性来实现各种技巧”。。。。你能告诉我这些技术是什么吗。谢谢。当bundle导出包时,它可以选择指定额外的键/值对(它们可以是您想要的任何东西)。这些额外的键/值对可以标记为必需的,因此其他bundle只能在指定相同的键/值对时执行导入包。有些Eclipse捆绑包使用这种技术是因为它们有拆分包,但我认为这更像是遗留问题,如果可能的话,您应该避免。