想象一下一个名为org.acme.foo.bar
的包含在Eclipse插件(或OSGi Bundle)中。
可以通过以下MANIFEST.MF片段来导出“.”:
Export-Package: .,
org.acme.foo.bar
编译器没有问题,所以这似乎是一个合法的导出。它是做什么的?与以下内容(未导出“.”)有何区别?
Export-Package: org.acme.foo.bar
想象一下一个名为org.acme.foo.bar
的包含在Eclipse插件(或OSGi Bundle)中。
可以通过以下MANIFEST.MF片段来导出“.”:
Export-Package: .,
org.acme.foo.bar
Export-Package: org.acme.foo.bar
.
是默认包,但根据OSGi Core, Release 6 specification,.
不是Export-Package
的有效值,因为包名必须以字母开头:
导出包 ::= 导出 (',' 导出)*
导出 ::= 包名 (';' 参数 )*
包名 ::= 包名称 (';' 包名称 )*
包名称 ::= 唯一名称
唯一名称 ::= 标识符 ('.' 标识符 )*
标识符 ::= jletter jletterordigit *
jletter ::= <见Java语言规范第三版的JavaLetter>
jletterordigit ::= <见 Java语言规范第三版的JavaLetterOrDigit>
因此最好不要使用默认包:
Export-Package: org.acme.foo.bar
在OSGi规范(V6)中找不到它。
在Eclipse(Oygen.2)中尝试了一个示例。 创建了两个插件(也称为bundle),一个是“provider”,另一个是“consumer”。 提供者导出默认包,并且在该包中包含一个公共类A。
=> 无法从插件“provider”访问A。 Eclipse建议导出包''
。调用该选项不会改变任何内容。编译错误仍然存在。
我建议不要使用这个。
.
或不存在的包并将.
解释为默认包违反了规范?规范允许非导出的默认包吗? - howlger