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。
我做错了什么?
我是否误解了先决条件属性的工作原理?作为旁注,如果我一起跳过先决条件属性,则不会安装任何功能......
答案 0 :(得分:3)
这是Karaf 4中的预期行为:Karaf创建了一个具有要安装的所有功能的子系统。该子系统一次性解决:成功或整体失败。
<div class="container">
<img src="http://dummyimage.com/200x300/000/fff">
</div>
属性告诉Karaf在独立子系统中安装此功能:在尝试解析其他功能之前,已安装并启动所有捆绑包。
在你的情况下: