【发布时间】:2015-05-28 07:44:29
【问题描述】:
我使用 osgi/equinox 并在浏览我们的捆绑包 MANIFEST.MF 文件时遇到奇怪的一行:
Export-Package: package.a.b.c;dynamic=domain
使用 dynamic=domain 选项导出包是什么意思,它与常规导出(没有任何附加选项)有何不同?
【问题讨论】:
标签: osgi equinox osgi-bundle
我使用 osgi/equinox 并在浏览我们的捆绑包 MANIFEST.MF 文件时遇到奇怪的一行:
Export-Package: package.a.b.c;dynamic=domain
使用 dynamic=domain 选项导出包是什么意思,它与常规导出(没有任何附加选项)有何不同?
【问题讨论】:
标签: osgi equinox osgi-bundle
您可以根据需要向 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 属性的匹配值,否则它无法从该捆绑包中导入该包。这对于处理拆分包很有用,因为它可以避免任何捆绑包“意外”导入拆分的一部分。然而,这是一个相当高级的话题!