Java 无法启动osgi捆绑包,因为无法解析导入
我制作了一个小的API包和一个应该使用API的服务包 在我的maven pom.xml文件中,我为正确版本的api包添加了依赖项,如下所示: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> 这
<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>