【问题标题】:Should library bundle implementing api bundle export the api packages?实现 api bundle 的 library bundle 是否应该导出 api 包?
【发布时间】:2016-05-29 15:07:45
【问题描述】:

我有一棵使用其他捆绑包的大捆绑包。例如:

  • 基本包使用 api 包。
  • api 包是纯 api 包
  • base bundle使用api bundle,是library bundle(有用的库函数,其他bundle可以使用)
  • api 包导出 api 包
  • 基本包导出基本包。基础包还从 api 包中导出 api 包。

让base bundle同时导出api包是否正确?

我这样做是因为现在用户只需将基本包添加到他们的构建路径中,并且 bndtools 可以找到基本 + api 包。否则,使用基本包的用户需要弄清楚基本包使用的是 api 包,他们需要将其添加到构建路径中。

【问题讨论】:

    标签: java osgi bnd bndtools


    【解决方案1】:

    您可以导出 API 包,但必须确保您也导入了这些包。因此,OSGi 框架可以决定它实际连接哪些包。如果在某些时候您有两个包导出相同的包,这一点很重要。

    顺便说一句。通常,您不应导出基本包捆绑包。如果 API 的用户仍然必须知道 impl,那么您不会获得真正的解耦。相反,您可以使用 API 接口将 impl 类导出为服务。

    【讨论】:

    • 感谢@Christian 提供的信息,很高兴知道我在正确的轨道上。基本包有点特殊,它是一个库包,可以看作是一个不那么纯粹的 api 包。但有时你只需要一个库包,例如用于提供 UI 基类,如果不是每个用户都必须创建自己的 UI,这会导致大量的代码重复和维护问题。
    • 库包完全没问题。只有在实例化服务很复杂或想要隐藏实现时才需要服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2012-03-12
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多