Java 无法启动osgi捆绑包,因为无法解析导入

Java 无法启动osgi捆绑包,因为无法解析导入,java,maven,osgi,bundle,Java,Maven,Osgi,Bundle,我制作了一个小的API包和一个应该使用API的服务包 在我的maven pom.xml文件中,我为正确版本的api包添加了依赖项,如下所示: <dependency> <groupId>at.foobar.osgi.api</groupId> <artifactId>foobarapi</artifactId> <version>1.0</version> </dependency> 这

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

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

<dependency>
  <groupId>at.foobar.osgi.api</groupId>
  <artifactId>foobarapi</artifactId>
  <version>1.0</version>
</dependency>
这对我来说似乎没问题。进口在那里,所以一切都应该是好的

现在我启动了equinox并安装了API和producer捆绑包。 然后我启动了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,但它已安装并启动?

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

在API捆绑包的maven捆绑包插件中,您应该有如下内容:

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

*
at.foobar.osgi.api*

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