我在运行时得到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
违反约束
答案 0 :(得分:1)
Bundle 2也必须导入A.使用A表示任何导入我的B并且还导入A的包必须导入与我相同的A.由于bundle 2不导入A,因此不起作用。此外,捆绑3需要导入A,因为B使用A.任何B的导入者也是A的用户,因此必须导入A.