【问题标题】:cant start osgi bundle because import cannot be resolved无法启动 osgi 包,因为无法解析导入
【发布时间】:2012-04-04 08:02:01
【问题描述】:

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

在我的 maven pom.xml 文件中,我在正确的版本中为我的 api 包添加了一个依赖项,如下所示:

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

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

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,效果很好。但是当我想启动生产者服务时,我得到了这个错误:

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,但是已经安装启动了?

【问题讨论】:

  • 您是否启动了 equinox 控制台并运行“packages at.foobar.osgi.api”以确认您的 API 包已导出该包?如果你得到一个巨大的包滚动列表,这意味着没有包导出该包。我还会尝试使用“bundle [api-bundle-name]”来查看 API 包确实导出了哪些包 - 并确认它本身已启动。
  • mh 我忘了导出 API...但是我不明白为什么我需要导出它?我阅读了核心规范并认为不应导出 API 包,因为它已由 osgi 解析?
  • 该包需要由您的包导出或包含在包中(即列出的私有包)。您都没有这样做,因此 Bnd 将其检测为导入的包。可能 Export 是正确的,因为它听起来像是其他包可能想要使用的 API。
  • 关于您的问题“不应导出 API 包,因为它已由 osgi 解析”......这对我来说毫无意义。你能澄清一下你预计会发生什么吗?
  • @NeilBartlett:嗯,现在我明白了,这正是我在评论中提出的问题!

标签: java maven osgi bundle


【解决方案1】:

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

在 API 包的 maven-bundle-plugin 中,您应该有如下内容:

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

【讨论】:

  • 老兄,你刚刚把我从酒鬼中解救了出来。非常非常非常感谢!
猜你喜欢
  • 2012-10-11
  • 2015-07-04
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
相关资源
最近更新 更多