我有一个捆绑包B1
使用另一个捆绑包B2
和捆绑包B2
导出以下包:
- 包裹
a.b.c
- 包裹
a.b.d
这里的问题是B1
我需要在包 abc 中使用一些内部类,可以说: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
包!为什么我需要再次插入内部类?
我有一个捆绑包B1
使用另一个捆绑包B2
和捆绑包B2
导出以下包:
a.b.c
a.b.d
这里的问题是B1
我需要在包 abc 中使用一些内部类,可以说: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
包!为什么我需要再次插入内部类?
这看起来像是对包在 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
.
如果现在的结果是错误消息“捆绑导出不在捆绑类路径中的包”,那么带有导出的捆绑实际上并不包含其内容中的包。可能您已将 export 语句添加到错误的包中,或者包的内容中以某种方式错误地省略了包。发生这种情况的原因取决于您使用的构建系统。
最后:不要混淆类和包!包是我们在 OSGi 中导入/导出的东西。当一个包被导出或导入时,它总是适用于该包中的所有类,包括“内部类”。