OSGi中的传递依赖

时间:2012-12-13 23:20:01

标签: java osgi bnd

我在运行时得到NoClassDefFoundError,我认为"uses"指令会避免这种情况,因为我认为它创造了传递性(如果我错了,请纠正我)。 这是我的配置:

Bundle 1 
  Export-package A

Bundle 2 
  Export-package B, uses "A"
  Import-package A

Bundle 3
  Import-package B

现在,当Bundle 3调用 B 中的一个类时会发生异常,而这个类又会调用 A 中的类。基于控制台,我可以看到BundleClassLoader在包3中查找类(换句话说,在其自身中),但在Bundle 1中找不到它。如果我强制BND导入捆绑3中的A一切正常,但它看起来太费力了。我觉得我错过了什么。 equinox不应该使用清单中的信息来设置bundle classpath吗?或者在最坏的情况下,不应该BND检测3对1的依赖关系并在3的清单中导入包A?

我的所有捆绑包都是active,我没有uses违反约束

1 个答案:

答案 0 :(得分:1)

Bundle 2也必须导入A.使用A表示任何导入我的B并且还导入A的包必须导入与我相同的A.由于bundle 2不导入A,因此不起作用。此外,捆绑3需要导入A,因为B使用A.任何B的导入者也是A的用户,因此必须导入A.