我正在开始一个编写 OSGi 包并使用 Maven 作为构建管理工具的项目。我的理解是对于 OSGi 捆绑包,您可以选择要保持私有/公开的包。
这是问题:
- 如果我依赖于将包声明
com.example
为导出包并声明com.example.internal
为私有包的捆绑包,那么在构建期间有什么方法可以检测com.example.internal
(构建应该失败)的使用吗?
如果 Eclipse 可以在开发期间检测到这将是很棒的,但我非常怀疑它可以。
一种选择是使用 Eclipse 的插件开发环境 (PDE),这是一套支持 OSGi 的工具。它不会让您针对内部包进行编译,因此它为您提供了开发时检查。与 maven 的 bundle 插件不同,它是 manifest-first 而不是 code first,这并不符合每个人的口味。
要将 PDE 与 Maven 集成,最好的办法是使用 Maven Tycho 插件。这在 Maven 中为您提供了一个完全支持 OSGi 的编译阶段。
在认为你会在 bnd(tools) 中找到很多对此的支持。一般来说,我通过查看 Import-Package 语句来找到这些罪魁祸首,该语句在 bndtools 中很好地可视化。bnd(tools) 支持在导入包没有导入范围时生成警告/错误,当您导入私有或不存在的包时会发生这种情况。