我有一个Vaadin应用程序,我正在尝试使用Maven + BND构建一组OSGI包。
我无法将捆绑包部署到Apache Felix,因为无法解析某些依赖项。 Apache Felix抱怨无法找到捆绑“A”所需的包XYZ,尽管此包在同一捆绑包中定义!!
我查看了Maven + BND生成的MANIFEST.MF文件,发现该包中的包(XYZ)被添加到“import”和“export”部分。我理解为什么“出口”,但为什么“进口”?为什么捆绑包试图导入自己的包?
我的MANIFEST.MF
Manifest-Version: 1.0
Export-Package: myexample.admin;uses:="com.vaadin.ui,myexample.webshared,
com.vaadin.terminal,myexample.mvc.view.impl,
myexample.mvc.model,myexample.mvc.renderer.map.impl,
myexample.mvc.renderer,myexample.mvc.model.impl,myexample.util"
Built-By: ask
Tool: Bnd-0.0.384
Bundle-Name: admin
Created-By: 1.6.0_21 (Sun Microsystems Inc.)
Bundle-Version: 0
Build-Jdk: 1.6.0_26
Bnd-LastModified: 1315674240833
Bundle-ManifestVersion: 2
Import-Package: myexample.admin;version="1.0",myexample.mvc.model,
myexample.mvc.model.impl,myexample.mvc.renderer,
myexample.mvc.renderer.map.impl,myexample.mvc.view.impl,
myexample.util,myexample.webshared,com.vaadin.terminal,com.vaadin.ui
Bundle-SymbolicName: admin
Include-Resource: ..\classes
Originally-Created-By: Apache Maven Bundle Plugin
答案 0 :(得分:6)
这是正确的行为。解释见OSGi核心规范的第3.5.6节。
关于来自Felix的未解决的错误......这必须与其他内容相关。请发布实际的错误消息。
答案 1 :(得分:2)
<Export-package>*;noimports:=true</export-package>
这导致您的所有包都被导出到OSGi中,并且它们都不会出现在您的import-package部分中。如果您只需要在导入包部分中显示几个导出的包,则可以为每个包设置noimports标志。最后,这种语法来自BND,因此它也适用于您的.bnd文件。