如何让Bundlor为OSGi Blueprint依赖项生成Import-Package

时间:2012-02-03 07:36:49

标签: spring maven osgi bundlor

我在一个打包为OSGi包的服务实现中使用Spring和Spring Integration。该服务由Blueprint发布,或者更具体地说是Gemini Blueprint [http://www.springframework.org/schema/osgi]

<bean id="myService" class="org.example.mti.MyServiceImplementation"/>
<osgi:service ref="myService" interface="org.example.mti.api.MyService"/>

上下文文件位于META-INF/spring/applicationContext*.xml

这适用于某些存根服务,例如内存支持的DAO,它们不依赖于库的实现。这些服务已经注册,可以通过另一个服务包进行操作。

对于更复杂的服务,我正在使用Spring Integration,服务实现显然需要访问Spring类,这些类由普通的Spring库包导出。

我正在使用Bundlor来管理MANIFEST.MF文件。我尝试过Spring Bundlor 1.0.0.RELEASE和Eclipse Virgo Bundlor 1.1.0.M3。

我的理解是Bundlor能够扫描Blueprint上下文文件以确定所需的类,但我没有看到任何有用的东西添加到Import-Package清单头。

Import-Package:
 org.example.dao,
 org.example.domain,
 org.example.mti.api,
 javax.inject,
 org.springframework.integration,
 org.springframework.integration.annotation,
 org.springframework.integration.support

当尝试使用Pax Exam运行捆绑包时,在Felix下,我看到ClassNotFoundException

java.lang.ClassNotFoundException:
    org.springframework.integration.gateway.GatewayProxyFactoryBean

我已尝试在Bundle-Blueprint中同时设置Spring-Contextmanifest.mf清单标头,并将其复制到MANIFEST.MF,但没有新的Import-Package值被添加。

是否期望在蓝图上下文中添加<int:gateway .../>将允许Bundlor正确确定运行时依赖性,例如上面的GatewayProxyFactoryBean

如果Bundlor无法确定正确的Import-Package值,那么您如何管理这些“内部”包裹要求?我认为,必须在某些第三方库中列出所有可能的包,这是不合理的。是否有一些等同于Import-Library我模糊地回忆起Spring DM?

参考文献:

http://static.springsource.org/s2-bundlor/1.0.x/user-guide/htmlsingle/user-guide.html http://blog.springsource.org/2009/09/26/bundlor-adds-support-for-the-blueprint-service/

1 个答案:

答案 0 :(得分:1)

用潜在的解决方案回答我自己的问题。

DynamicImport-Package: org.springframework.*

虽然这是a bit of a hack,但确实有效