想象一个带有包org.acme.foo.bar
的Eclipse插件(resp.OSGi包)。
可以导出“。”例如请参阅以下 MANIFEST.MF 代码段:
Export-Package: .,
org.acme.foo.bar
编译器没有问题所以它似乎是一个合法的出口。
它做什么?以下是什么区别(“。”未导出)?
Export-Package: org.acme.foo.bar
答案 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建议导出包''
。调用该选项不会改变任何内容。编译错误仍然存在。
我建议不要使用它。