我有2.2.8版本Karaf的问题(最有可能在早期版本也是如此)。
我将使用Karaf到主机系统与动态配置包。 束由用户部署的,我不能事先它们自己知道。
我期待BundleActivator.start的顺序(),以完全对应打包捆之间的依赖关系(进口/出口包的依赖)和规划的期望,这将是安全的假设,bundle0将bundle1将要启动之前完全初始化。 但它不是这样 - 它似乎BundleActivator.start()在“随机”的顺序调用,而忽视束之间软件包的依赖关系。
样本用例,我有3个库
test-lib0 - defines testlib0.ITestRoot, exports testlib0 package
test-lib1 - defines testlib1.TestRoot implements ITestRoot, exports testlib1 package
test-lib2 - uses both libs, ITestRoot and TestRoot
当Karaf开始时,我看到下面的控制台输出示例
karaf@root> TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
TestLib0Activator.start()
但我相信它应该按以下顺序总是
TestLib0Activator.start()
TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
我安装示例项目的测试。 测试用例:后“MVN安装”刚刚摆脱./deploy文件夹罐子Karaf的同一文件夹中,跟踪消息应该出现在控制台中。 (注:它可以从第一次尝试正常工作,再试一次呢:))
样品测试项目http://karaf.922171.n3.nabble.com/file/n4025256/KarafTest.zip
注:这是来自交叉后http://karaf.922171.n3.nabble.com/What-is-the-natural-start-order-for-dependent-bundle-td4025256.html