【问题标题】:OSGi and Maven detect use of private packageOSGi 和 Maven 检测私有包的使用
【发布时间】:2012-06-08 18:35:16
【问题描述】:

我正在开始一个编写 OSGi 包并使用 Maven 作为构建管理工具的项目。我的理解是对于 OSGi 捆绑包,您可以选择要保持私有/公开的包。

问题来了:

  • 如果我依赖于将com.example 包声明为导出包并将com.example.internal 声明为私有包的捆绑包,那么在构建期间有什么方法可以检测com.example.internal 的使用(构建应该失败)?

如果 Eclipse 可以在开发期间检测到,那就太棒了,但我非常怀疑它是否可以。

【问题讨论】:

    标签: maven osgi


    【解决方案1】:

    一种选择是使用 Eclipse 的插件开发环境 (PDE),这是一套支持 OSGi 的工具。它不会让您针对内部包进行编译,因此它为您提供了开发时检查。与 maven 的 bundle 插件不同,它是 manifest-first 而不是 code first,这并不符合每个人的口味。

    要将 PDE 与 Maven 集成,最好的办法是使用 Maven Tycho plugin。这在 Maven 中为您提供了一个完全支持 OSGi 的编译阶段。

    【讨论】:

    • 谢谢,我会尝试 Tycho 插件,并在它工作后给出这个公认的答案。谢谢!
    【解决方案2】:

    认为您会在 bnd(tools) 中找到很多对此的支持。一般来说,我通过查看 Import-Package 语句来找到这些罪魁祸首,该语句在 bndtools 中很好地可视化。 bnd(tools) 支持在导入包没有导入范围时生成警告/错误,当您导入私有或不存在的包时会发生这种情况。

    【讨论】:

    • 不幸的是,bndtools 是 Maven 的替代品,它们不能一起使用。 @Peter,如果所有bnd 指令都写在外部bnd.bnd 文件中,你能否指出bnd 命令行工具如何提取其中的一些值?
    • 如果你开始一个新项目,我建议你看看 Bndtools。在即将发布的版本中,我们支持对 maven 存储库的全面支持:本地、远程(Nexus/Artifactory)、快照和发布。您可以在每个(增量)构建周期后自动将 JAR 安装到本地 m2 存储库中,从而可以轻松地与其他 maven 项目一起使用。虽然我显然有偏见,但 Bndtools 中的 Eclipse 支持比 m2e 早了几光年。
    猜你喜欢
    • 2012-05-20
    • 2012-09-26
    • 2010-12-16
    • 2016-07-20
    • 2016-08-13
    • 2012-06-30
    • 2016-09-18
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多