2015-05-28 49 views
0

我用的OSGi /春分和在瀏覽MANIFEST.MF文件,我所遇到的怪行的程序包中的一個:什麼是動態=域導出在osgi中?

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

是什麼意思,該包裝是導出的動態=域選項和怎麼做它與常規出口不同(沒有任何附加選項)?

回答

4

您可以根據需要將任意數量的自定義屬性添加到Export-Package子句中。另一方面(Import-Package),您可以指定只有具有特定屬性的包才適合您。

請參見3.6.5 出口,包裝的OSGi核心規範的

以下屬性是本規範的一部分:

  • 版本 - 指定包的版本。其語法如第35頁的版本中所定義。其 定義了相關軟件包的版本。默認值是0.0.0。

  • specification-version - 版本屬性的別名僅用於簡化從早期版本的遷移。如果版本屬性存在,則值必須相等。

此外,可以指定任意的匹配屬性。見屬性匹配58

頁上,並請參見3.7.7 屬性相匹配的OSGi核心規範的

例如,下面的語句將匹配。

A: Import-Package: com.acme.foo;company=ACME 

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

屬性值進行比較字符串除了版本明智和捆綁的版本屬性,其使用版本範圍的比較。屬性值中的前導和尾隨空白必須被忽略。

請注意,我僅引用了這些章節的某些部分。你應該檢查規範中的原件。

我不認爲這些屬性在Equinox代碼中以特定方式處理。如果有多個具有相同名稱的包,它們可以在Import-Pacakge子句中使用。

+0

今天我學到了東西,謝謝! – kukis

+0

值得一提的是,通過添加指令'mandatory:= dynamic',可以將某些或所有屬性標記爲強制性的。這意味着導入器*必須*具有'動態'屬性的匹配值,否則它不能從該捆綁包中導入該包。這對於處理拆分包來說很有用,因爲它避免了任何包「意外」地導入部分拆分。然而,這是一個相當先進的話題! –

+0

@NeilBartlett這就是爲什麼我建議閱讀說明:) –