osgi import-package无法到达内部类

时间:2013-03-12 10:40:22

标签: osgi knopflerfish

我有一个捆绑B1使用另一个捆绑B2并捆绑B2导出以下包:

  • package a.b.c
  • package a.b.d

这里的问题在B1我需要在包a.b.c中使用一些内部类,比方说:a.b.c.d.e但在这种情况下,eclipse会抛出以下错误:

The package a.b.c.d.e is used but not imported in manifest.

但我已经B2导出/ B1导入a.b.c包!为什么我需要再次插入内部类?

1 个答案:

答案 0 :(得分:3)

这看起来像是对Java如何在Java中工作的误解。

包不是分层的,即使它们看起来像是。因此,在任何意义上,包a.b.c.d.e都不是a.b.c的“子”包。它们只是两个不同名称的不同包。

因此,如果您使用了包a.b.c.d.e中的类,则需要导入包a.b.c.d.e。您可能还导入a.b.c的事实无关紧要。

更新总结下面评论/聊天中的讨论:

  1. 错误“使用包xyz但未在清单中导入”意味着需要将包添加到Import-Package,并注意包不是嵌套的,因此每个包都需要导入

  2. 如果将该包添加到Import-Package会导致解决方案错误,则表示没有现有的包导出该包。无论哪个包含有相关包,都应将其列在Export-Package

  3. 如果结果现在是错误消息“Bundle导出不在bundle classpath中的包”,那么带有导出的包实际上并不包含包中的内容。您可能已将导出语句添加到错误的包中,或者以某种方式从包的内容中错误地省略了包。发生这种情况的原因取决于您正在使用的构建系统。

  4. 最后:不要让课程和包混在一起!包是我们在OSGi中导入/导出的东西。导出或导入包时,它始终适用于该包中所有类的所有,包括“内部类”。