1

我有一个捆绑包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包!为什么我需要再次插入内部类?

4

1 回答 1

4

这看起来像是对包在 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. 如果现在的结果是错误消息“捆绑导出不在捆绑类路径中的包”,那么带有导出的捆绑实际上并不包含其内容中的包。可能您已将 export 语句添加到错误的包中,或者包的内容中以某种方式错误地省略了包。发生这种情况的原因取决于您使用的构建系统。

最后:不要混淆类和包!包是我们在 OSGi 中导入/导出的东西。当一个包被导出或导入时,它总是适用于该包中的所有类,包括“内部类”。

于 2013-03-12T11:02:34.287 回答