我有一个捆绑B1
使用另一个捆绑B2
并捆绑B2
导出以下包:
a.b.c
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
包!为什么我需要再次插入内部类?
答案 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
的事实无关紧要。
更新总结下面评论/聊天中的讨论:
错误“使用包xyz但未在清单中导入”意味着需要将包添加到Import-Package
,并注意包不是嵌套的,因此每个包都需要导入
如果将该包添加到Import-Package
会导致解决方案错误,则表示没有现有的包导出该包。无论哪个包含有相关包,都应将其列在Export-Package
。
如果结果现在是错误消息“Bundle导出不在bundle classpath中的包”,那么带有导出的包实际上并不包含包中的内容。您可能已将导出语句添加到错误的包中,或者以某种方式从包的内容中错误地省略了包。发生这种情况的原因取决于您正在使用的构建系统。
最后:不要让课程和包混在一起!包是我们在OSGi中导入/导出的东西。导出或导入包时,它始终适用于该包中所有类的所有,包括“内部类”。