OSGi超类可见性

时间:2014-01-14 19:46:33

标签: java class package osgi

我有一个子类,它引用不同包中的超类。我是否需要导出两个包,以使包引用和子类。

示例:

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插件自动构建的,我认为它是在幕后使用的。

2 个答案:

答案 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,因为缺少部分定义。