【问题标题】:What is dynamic=domain export in osgi?osgi 中的动态=域导出是什么?
【发布时间】:2015-05-28 07:44:29
【问题描述】:

我使用 osgi/equinox 并在浏览我们的捆绑包 MANIFEST.MF 文件时遇到奇怪的一行:

Export-Package: package.a.b.c;dynamic=domain

使用 dynamic=domain 选项导出包是什么意思,它与常规导出(没有任何附加选项)有何不同?

【问题讨论】:

    标签: osgi equinox osgi-bundle


    【解决方案1】:

    您可以根据需要向 Export-Package 子句添加任意数量的自定义属性。另一方面(Import-Package),你可以指定只有具有特定属性的包才适合你。

    参见OSGi核心规范的3.6.5 Export-Package章节:

    以下属性是本规范的一部分:

    • version - 命名包的版本,其语法如第 35 页的版本中定义。它 定义相关包的版本。默认值为 0.0.0。

    • specification-version - 版本属性的别名,仅用于简化从早期版本的迁移。如果存在版本属性,则值必须相等。

    此外,可以指定任意匹配属性。参见第 58 页的属性匹配

    并参见OSGi核心规范的3.7.7 Attribute Matching一章:

    例如,以下语句将匹配。

    A: Import-Package: com.acme.foo;company=ACME
    
    B: Export-Package: com.acme.foo; «
      company="ACME"; «
      security=false
    

    除了使用版本范围比较的 version 和 bundle-version 属性外,属性值是按字符串比较的。必须忽略属性值中的前导和尾随空格。

    请注意,我只引用了这些章节的部分内容。您应该检查规范中的原件。

    我不认为 Equinox 的代码中以特定方式处理这些属性。如果有多个同名的包,则可以在 Import-Pacakge 子句中使用它们。

    【讨论】:

    • 值得一提的是,通过添加指令mandatory:=dynamic,可以将部分或所有属性标记为强制属性。这意味着导入器必须具有dynamic 属性的匹配值,否则它无法从该捆绑包中导入该包。这对于处理拆分包很有用,因为它可以避免任何捆绑包“意外”导入拆分的一部分。然而,这是一个相当高级的话题!
    • @NeilBartlett 这就是我推荐阅读规范的原因:)
    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2011-02-16
    • 2022-01-18
    • 2021-04-06
    • 2016-08-03
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多