Apache Karaf功能先决条件

时间:2016-06-30 06:41:45

标签: osgi apache-karaf karaf

Karaf 4.0.3

我有以下伪功能:

<features name="my-feature" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0">
<feature name="C" version="${project.version}" start-level="25" install="auto">
    <bundle start-level="25">...BundleC1...</bundle>
</feature>

<feature name="A" version="${project.version}" start-level="30" install="auto">
    <feature prerequisite="true">C</feature>
    <bundle start-level="30">...BundleA1...</bundle>
</feature>

<feature name="B" version="${project.version}" start-level="35" install="auto">
    <feature prerequisite="true">C</feature>
    <bundle start-level="35">...BundleB1...</bundle>
</feature>

C是独立的 A取决于C
B取决于C

在这个例子中,bundle'BundleB1'导入错误的主要版本'BundleC1',我们得到“缺少需求”错误(如预期的那样)。但是,如果我登录karaf控制台并运行'feature:list',我会看到C已启动,A已卸载且B已卸载。

我希望A能够被启动,因为它只有C的依赖关系。如果我注释掉整个C功能,或者我之后运行feature:install A

,我将开始正常

如果我将这三个功能中的每一个都放在单独的feature.xml文件中,我会得到C + A的预期结果为Started,B为Uninstalled。

我做错了什么?

我是否误解了先决条件属性的工作原理?作为旁注,如果我一起跳过先决条件属性,则不会安装任何功能......

1 个答案:

答案 0 :(得分:3)

这是Karaf 4中的预期行为:Karaf创建了一个具有要安装的所有功能的子系统。该子系统一次性解决:成功或整体失败。

<div class="container"> <img src="http://dummyimage.com/200x300/000/fff"> </div>属性告诉Karaf在独立子系统中安装此功能:在尝试解析其他功能之前,已安装并启动所有捆绑包。

在你的情况下:

  • 安装/启动C;
  • A + B已解决,但未通过