我有一个子类,该子类在另一个包中引用了超类。我是否需要导出两个软件包,以具有捆绑包引用和子类。
例:
BundleOne exports packageB
packageA: interface i
packageB: abstract class B implements i
BundleTwo imports packageB
packageC: class C extends B
这个示例对我不起作用,并且osgi框架抱怨缺少packageA的导入包约束。我发现这很奇怪,因为我没有在C类中的任何地方引用它。
导入包声明是由maven插件自动构建的,我认为它是在后台使用bnd的。
最佳答案
是的,您绝对必须导出两个软件包。您为什么觉得这很奇怪?实际上,您确实引用了包I
中的接口A
,因为您引用的是B
类I
。
实际上,您的课程C
也是I
。为了有机会构造您的类,Java虚拟机必须具有完整的超类层次结构的可见性。