BND将相同的包放入manifest.mf的导出和导入部分

时间:2011-09-10 20:34:14

标签: maven osgi vaadin bnd

我有一个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

2 个答案:

答案 0 :(得分:6)

这是正确的行为。解释见OSGi核心规范的第3.5.6节。

关于来自Felix的未解决的错误......这必须与其他内容相关。请发布实际的错误消息。

答案 1 :(得分:2)

尼尔当然是正确的。说实话,我使用noimports非常成功:= true来解决这个问题。在我的应用程序中,我的maven-bundle-plugin部分通常有以下内容:

<Export-package>*;noimports:=true</export-package>

这导致您的所有包都被导出到OSGi中,并且它们都不会出现在您的import-package部分中。如果您只需要在导入包部分中显示几个导出的包,则可以为每个包设置noimports标志。最后,这种语法来自BND,因此它也适用于您的.bnd文件。