我有一个子类,它引用不同包中的超类。我是否需要导出两个包,以使包引用和子类。
示例:
BundleOne exports packageB
packageA: interface i
packageB: abstract class B implements i
BundleTwo imports packageB
packageC: class C extends B
此示例对我不起作用,osgi框架抱怨缺少packageA的导入包约束。我发现这很奇怪,因为我在C级的任何地方都没有提到它。
import-package声明是由maven插件自动构建的,我认为它是在幕后使用的。
答案 0 :(得分:1)
是的,你绝对必须导出这两个包。为什么你觉得这很奇怪?确实引用了包I
中的界面A
,因为您引用了 B
的课程I
。
事实上,您的班级C
也是I
。为了有机构构建类,Java虚拟机必须具有完整超类层次结构的可见性。
答案 1 :(得分:1)
是的,你必须导出两者,B的类定义依赖于A,因此你也不能在没有A的情况下引用B.
这类似于一个简单的Java应用程序,其中包A在 A.jar 中,B在 B.jar 中。如果在运行时,A.jar不可用,那么你就无法实现B,因为缺少部分定义。