2

我有一个非常简单的 OSGI 应用程序,它只监听注册/取消注册并向标准输出发送一些消息。

我的应用程序中有一个简单的 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 中,但是,当激活器被调用时,它会抱怨缺少这样的依赖项:

捆绑 foo.bar.project [56] 中未解决的约束:无法解决 56.0:缺少要求 [56.0] osgi.wiring.package;(&(osgi.wiring.package=org.springframework.context)(version>=3.1.0)(!(version>=4.0.0)))

我尝试更改此行:

org.spring.*

对此:

*

felix 在其中抱怨 android-dalvik 不存在,所以我完全一无所知。

知道如何在不使用 Spring DM 的情况下将 Spring 包含在 OSGI 项目中吗?

编辑:这是生成的清单抱怨的内容(来自网络控制台)

导出的包

foo.bar.osgi foo.bar.service foobar.tracker

Imported Packages org.osgi.framework,version=[1.6,2) from org.apache.felix.framework (0) org.osgi.util.tracker,version=[1.5,2) from org.apache.felix.framework ( 0) ERROR: org.springframework.context,version=[3.1,4) -- 无法解决 ERROR: org.springframework.context.support,version=[3.1,4) -- 无法解决

清单标头 Bnd-LastModified:1339014840268

构建-Jdk:1.6.0_32

建造者: fooBar

捆绑激活器:foo.bar.osgi.Activator

捆绑清单版本:2

捆绑名称:fooBar

Bundle-SymbolicName:foo.bar.OSGIProject

捆绑版本:0.20.0.SNAPSHOT

创建者:Apache Maven Bundle Plugin

导出包: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

进口包装:

org.osgi.framework;版本="[1.6, 2)", org.osgi.util.tracker; 版本="[1.5, 2)", org.springframework.context; 版本="[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>
4

2 回答 2

1

你在做

<Export-Package>org.spring.*</Export-Package>

但感兴趣的包是org.springframework.context. 导出语法是一种模式,而不是完整的正则表达式,因此导出中的点实际上意味着点(即包分隔符),而不是任意字符。

<Export-Package>org.spring*</Export-Package>

应该做你想做的。

于 2012-06-07T11:16:28.390 回答
1

嗯,我觉得你的包基本没问题,但是 Felix 似乎无法解析 org.springframework 包,所以你需要添加一些导出 org.springframework 包的包。我不太了解spring,但我想你可以从springsource下载那些包。

Maven 一定也找到了一个,因为它似乎能够编译它。

于 2012-06-07T10:03:59.943 回答