3

我有一个 Vaadin 应用程序,我正在尝试使用 Maven + BND 将其构建为一组 OSGI 包。

我无法将捆绑包部署到 Apache Felix,因为某些依赖项无法解决。Apache Felix 抱怨找不到包“A”所需的包 XYZ,尽管这个包是在同一个包中定义的!

我查看了由 Maven + BND 生成的 MANIFEST.MF 文件,发现此捆绑包中的包 (XYZ) 已添加到“导入”和“导出”部分。我明白为什么“出口”,但为什么“进口”?为什么捆绑包试图导入自己的包?

我的清单.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
4

2 回答 2

7

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

关于 Felix 未解决的错误......这一定与其他事情有关。请发布实际的错误消息。

于 2011-09-10T23:33:29.953 回答
2

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

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

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

于 2011-09-13T19:12:40.157 回答