如何将Spring正确地包含在OSGified包中

时间:2012-06-06 13:44:56

标签: spring maven osgi

我有一个非常简单的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>

2 个答案:

答案 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>

应该做你想做的事。