浅析OSGI的bundle依赖Bundle是OSGI中的基础元件,不同的bundle之间可以相互依赖、引用,这样许多bundle才会共
浅析OSGI的bundle依赖
Bundle是OSGI中的基础元件,不同的bundle之间可以相互依赖、引用,这样许多bundle才会共同协作,实现一些比较复杂的功能。Bundle的依赖一直是一个比较棘手的问题,包括Lazy start等,下面我们具体Bundle依赖到底是怎么一回事。
测试场景:Eclipse 3.6, Equinox?
先看看基础的依赖问题
?
具体见?http://www.xeclipse.com/?p=1165
?
?
当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?
当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?
这个嘛 很容易测试的,先预测一下是根据依赖中的顺序来的。因为这个一般是class loader的顺序吧?
当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?
测试通过,我的判断正确,按照
Require-Bundle: org.salever.osgi.depends.sdk2;bundle-version="1.0.0",
org.salever.osgi.depends.sdk1;bundle-version="1.0.0"
的顺序来决定用哪一个哦 这样其实很容易出现运行时的错误哦
当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?
测试通过,我的判断正确,按照
Require-Bundle: org.salever.osgi.depends.sdk2;bundle-version="1.0.0",
org.salever.osgi.depends.sdk1;bundle-version="1.0.0"
的顺序来决定用哪一个哦 这样其实很容易出现运行时的错误哦
应该是加载的顺序吧?至于你在eclipse依赖里面的顺序只是一个参考?
当A,B插件都存在a.b.DemoTest的类,都导出了a.b包,在C插件中引入A,B插件,到底是用那个插件的a.b.DemoTest呢?
测试通过,我的判断正确,按照
Require-Bundle: org.salever.osgi.depends.sdk2;bundle-version="1.0.0",
org.salever.osgi.depends.sdk1;bundle-version="1.0.0"
的顺序来决定用哪一个哦 这样其实很容易出现运行时的错误哦
应该是加载的顺序吧?至于你在eclipse依赖里面的顺序只是一个参考?
好像就是依赖的顺序