"Export-Package: ." 是什么意思?

What Does "Export-Package: ." Mean?

想象一个带有包 org.acme.foo.bar.

的 Eclipse 插件(resp.OSGi 包)

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

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

编译器对此没有任何问题,因此它似乎是一个合法的出口。

它有什么作用?跟下面的(“.”不导出)有什么区别?

Export-Package: org.acme.foo.bar

尽管 Eclipse MANIFEST.MF 验证允许“.”根据 OSGi 规范,它是无效的。这似乎是默认包的意思,但这不是导出的明智之举。

这似乎已被 Eclipse 错误 366800 证实,该错误报告使用了“.”。在 'org.eclipse.datatools.sqltools.parsers.sql.query' 插件中就像这样。该错误被接受为错误和“。”删除。

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

Export-Package ::= export ( ',' export)*
export ::= package-names ( ';' parameter )*
package-names ::= package-name ( ';' package-name )*
package-name ::= unique-name
unique-name ::= identifier ( '.' identifier )*
identifier ::= 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

在 OSGi 规范 (V6) 中找不到它。

尝试了 Eclipse (Oygen.2) 中的示例。创建了两个插件(也称为捆绑包),一个 "provider",另一个 "consumer"。 提供商导出默认包,并且在该包中包含 public Class A.

=> 无法从插件 "provider" 访问 A。 Eclipse 建议导出包 ''。调用该选项不会改变任何东西。编译错误依然存在。

我建议不要使用它。