我有一个非常简单的OSGI应用程序,它只是监听注册/取消注册并向stdout发送一些消息。
我的应用程序中有一个简单的Spring初始化bean。我使用maven bundle插件捆绑jar并将其放入felix。这是pom的一个例外:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.0.RELEASE</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.2.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>org.spring.*</Export-Package>
<Bundle-Activator>foo.bar.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
该项目编译得很好,可以很好地部署到Felix中,但是,当调用激活器时,它会抱怨缺少依赖性:
bundle foo.bar.project [56]中未解决的约束:无法执行 解决56.0:缺少要求[56.0] osgi.wiring.package; (及(osgi.wiring.package = org.springframework.context)(版本&GT; = 3.1.0)((版本&GT;!= 4.0.0)))
我尝试更改此行:
org.spring。*
对此:
*
其中felix抱怨android-dalvik不存在,所以我完全无能为力。
知道如何在不使用Spring DM的情况下将Spring包含在OSGI项目中吗?
编辑:这是生成的清单抱怨的内容(来自Web控制台)
导出的包
foo.bar.osgi foo.bar.service foobar.tracker
导入的包org.osgi.framework,version = [1.6,2)来自 org.apache.felix.framework(0)org.osgi.util.tracker,version = [1.5,2) 来自org.apache.felix.framework(0)错误: org.springframework.context,version = [3.1,4) - 无法解析 错误:org.springframework.context.support,version = [3.1,4) - 不能 得到解决
Manifest Headers Bnd-LastModified:1339014840268
Build-Jdk:1.6.0_32
内置:fooBar
Bundle-Activator:foo.bar.osgi.Activator
Bundle-ManifestVersion:2
Bundle-Name:fooBar
Bundle-SymbolicName:foo.bar.OSGIProject
Bundle-Version:0.20.0.SNAPSHOT
创建者:Apache Maven Bundle插件
Export-Package:foo.bar.osgi.tracker;用途:=“foo.bar.osgi.service, org.osgi.util.tracker,org.osgi.framework“,
foo.bar.osgi;用途:=“org.springframework.context.support, org.springframework.context,org.osgi.framework“,foo.bar.osgi.service
Import-Package:
org.osgi.framework; version =“[1.6,2)”,org.osgi.util.tracker; version =“[1.5,2)”,org.springframework.context; version =“[3.1,4)”, org.springframework.context.support; version =“[3.1,4)” 清单 - 版本:1.0工具:Bnd-1.15.0
这是我在pom中改变的时候
<configuration>
<instructions>
<Include-Resource>src/main/resources/spring-beans.xml</Include-Resource>
<Bundle-Activator>nl.synovite.scheduled.osgi.Activator</Bundle-Activator>
<Import-Package>*</Import-Package>></instructions>
</configuration>
答案 0 :(得分:1)
好吧,我认为您的捆绑包基本上没问题,但Felix似乎无法解析org.springframework包,因此您需要添加一些导出org.springframework包的捆绑包。我不太清楚,但我想你可以从springource下载这些包。
Maven也必须找到一个,因为它似乎能够编译它。
答案 1 :(得分:1)
你在做什么
<Export-Package>org.spring.*</Export-Package>
但感兴趣的包是org.springframework.context
。导出语法是一种模式,而不是完整的正则表达式,因此导出中的点实际上意味着点(即包分隔符),而不是任意字符。
<Export-Package>org.spring*</Export-Package>
应该做你想做的事。