什么是“出口 - 包装:”。意思?

时间:2018-02-07 10:21:20

标签: eclipse osgi eclipse-rcp osgi-bundle manifest.mf

想象一个带有包org.acme.foo.bar的Eclipse插件(resp.OSGi包)。

可以导出“。”例如请参阅以下 MANIFEST.MF 代码段:

Export-Package: .,
 org.acme.foo.bar

编译器没有问题所以它似乎是一个合法的出口。

它做什么?以下是什么区别(“。”未导出)?

Export-Package: org.acme.foo.bar

3 个答案:

答案 0 :(得分:4)

.默认包,但根据OSGi Core, Release 6 specification .不是Export-Package的有效值因为包名必须以字母开头:

  

Export-Package :: = export(','export)*
export :: = package-names   (';'参数)*
package-names :: = package-name(';'   package-name)*
package-name :: = unique-name
unique-name :: =   标识符('。'标识符) *
标识符:: = jletter   jletterordigit *
jletter :: =< see Java Language Specification Third Edition for JavaLetter>
jletterordigit :: =< see   Java Language Specification Third Edition for JavaLetterOrDigit>

因此,最好不要使用默认包:

Export-Package: org.acme.foo.bar

答案 1 :(得分:3)

虽然Eclipse MANIFEST.MF验证允许'。'根据OSGi规范,它无效。它似乎意味着默认包,但这不是一个明智的出口。

这似乎是由Eclipse bug 366800证实的,它报告了'。'的用法。像'org.eclipse.datatools.sqltools.parsers.sql.query'插件中的这样。该错误被接受为错误和'。'除去。

答案 2 :(得分:1)

无法在OSGi Spec(V6)中找到它。

在Eclipse(Oygen.2)中尝试过一个例子。创建了两个插件(又名捆绑包),一个“提供者”,另一个“消费者”。 提供程序导出默认包,并且该包中包含公共类A.

=>从插件“提供程序”访问A是不可能的。 Eclipse建议导出包''。调用该选项不会改变任何内容。编译错误仍然存​​在。

我建议不要使用它。