reo*_*eox 8 java osgi bundle maven
我已经制作了一个小型API Bundle和一个应该使用API的服务包.
在我的maven pom.xml文件中,我在正确的版本中添加了对我的api包的依赖,如下所示:
<dependency>
<groupId>at.foobar.osgi.api</groupId>
<artifactId>foobarapi</artifactId>
<version>1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我正在使用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
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎没问题.进口就在那里,所以一切都应该没问题.
现在我启动了equinox并安装了API和生产者包.然后我启动API,这很好.但是,当我想启动Producer服务时,我收到此错误:
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"
Run Code Online (Sandbox Code Playgroud)
看来框架找不到api,但是它的安装和启动?
确保导出API包,以便服务包可以绑定到它们.
在你的API捆绑的maven-bundle-plugin中你应该有类似的东西:
<configuration>
<instructions>
<Import-Package>
*
</Import-Package>
<Export-Package>
at.foobar.osgi.api.*
</Export-Package>
</instructions>
</configuration>
Run Code Online (Sandbox Code Playgroud)