无法启动osgi bundle因为导入无法解决

时间:2012-03-19 19:51:20

标签: java maven osgi bundle

我制作了一个小型API Bundle和一个应该使用API​​的服务包。

在我的maven pom.xml文件中,我为我的api包添加了一个dependecy,其版本正确如下:

<dependency>
  <groupId>at.foobar.osgi.api</groupId>
  <artifactId>foobarapi</artifactId>
  <version>1.0</version>
</dependency>

我正在使用maven-bundle插件来创建捆绑包,因此我使用mvn clean install来创建jar文件。 Manifest看起来像这样(服务):

Manifest-Version: 1.0
Private-Package: at.foobar.osgi.producer
Built-By: foobar
Tool: Bnd-0.0.238
Bundle-Name: foobarproducer
Created-By: Apache Maven Bundle Plugin
Bundle-Version: 1.0
Build-Jdk: 1.6.0_26
Bnd-LastModified: 1332185439257
Bundle-ManifestVersion: 2
Bundle-Activator: at.foobar.osgi.producer.Activator
Import-Package: at.foobar.osgi.api,org.osgi.framework;version="1.4"
Bundle-SymbolicName: at.foobar.osgi.producer.foobarproducer

对我来说似乎没问题。进口就在那里,所以一切都应该没问题。

现在我启动了equinox并安装了API和生产者包。 然后我启动API,这很好。但是,当我想启动Producer Service时,我收到了这个错误:

org.osgi.framework.BundleException: The bundle "at.foobar.osgi.producer.foobarproducer_1.0.0 [4]" could not be resolved. Reason: Missing Constraint: Import-Package: at.foobar.osgi.api; version="0.0.0"

似乎框架找不到api,但是它已经安装并启动了?

1 个答案:

答案 0 :(得分:6)

确保导出API包,以便服务包可以绑定到它们。

在API捆绑包的maven-bundle-plugin中,你应该有类似的东西:

            <configuration>
                <instructions>
                    <Import-Package>
                        *
                    </Import-Package>
                    <Export-Package>
                        at.foobar.osgi.api.*
                    </Export-Package>
                </instructions>
            </configuration>