1

我们开始在一个项目中使用 Apache Felix Karaf,并使用 Blueprint Services。

现在,我想使用 Spring Dynamic Modules 来访问高级 DI 功能和测试功能。问题是我无法弄清楚如何让 Spring DM 2.x 在 Felix 上运行。

安装了 spring 和 spring-dm 功能:

karaf@root> features:list
State         Version       Name       Repository
[installed  ] [2.5.6.SEC01] spring     karaf-1.6.0
[installed  ] [1.2.0      ] spring-dm  karaf-1.6.0
[uninstalled] [1.6.0      ] wrapper    karaf-1.6.0
[uninstalled] [1.6.0      ] obr        karaf-1.6.0
[installed  ] [1.6.0      ] http       karaf-1.6.0
[uninstalled] [1.6.0      ] war        karaf-1.6.0
[uninstalled] [1.6.0      ] webconsole karaf-1.6.0
[installed  ] [1.6.0      ] ssh        karaf-1.6.0
[installed  ] [1.6.0      ] management karaf-1.6.0

但是为了使用蓝图服务,我需要 Spring DM 2.x(至少根据 Spring 网站,“对于蓝图服务 RI,请使用 2.x+版本。”)。

我看到可以向 Apache Felix 添加功能,但据我了解,这需要在某个存储库上声明 features.xml 文件。

我的问题是,是否有更简单的方法,也可以更集成(例如通过 Maven)

4

1 回答 1

2

好的,经过一番调查,我设法让这些捆绑包在 Karaf 上与 Spring DM 2.0.0.M1 一起使用。

我解决它的方法是通过定义这样的特性 xml 描述符来添加一个额外的特性集(参见http://karaf.apache.org/manual/2.2.5/users-guide/provisioning.html ):

<?xml version="1.0" encoding="UTF-8"?>
  <features name="spring-features">
    <feature name="spring-dm-2" version="2.0.0.M1">
        <feature version="3.0.3.RELEASE">spring</feature>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.cglib/2.1_3_6</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-io/2.0.0.M1</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-core/2.0.0.M1</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-extender/2.0.0.M1</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-annotation/2.0.0.M1</bundle>
        <bundle>mvn:org.apache.karaf.deployer/org.apache.karaf.deployer.spring/2.1.0</bundle>
    </feature>
  </features>

然后通过 Karaf shell 像这样加载它

features:addurl /path/to/spring-dm-feature.xml
features:install spring-dm-2

请注意,这可行,但带有一些丑陋的堆栈跟踪——我希望在 Karaf 用户列表/Spring 人员的帮助下,我们将能够摆脱这些。

于 2010-10-20T10:27:46.510 回答