开始读OSGi的规范文档,发现很多不懂之处,对其中的理解记录在此
uses用法
uses放在export header里面,用于限制依赖资源的版本,如果框架中有同一个包的多个版本,在uses的限制下,如果检测到版本冲突,osgi标准的resolve算法会抛出uses conflict
-osgi中的类由class loader和class name决定,当两个以上的class loader都加载了同样class name的类,并发生“contact”,就会报错,因此引入uses机制
-uses标记的包,一定是要么被当前bundle导出,要么导入的
for example:
bundle A
version 1.0
export package a version 1.0
bundle A
version 2.0
export package a version 2.0
bundle B
version 1.0
import package a version 1.0
export package b uses:=a
bundle C
version 1.0
import package a version 2
解析两个A和一个B都没问题,但是再解析C就会有问题,因为uses不允许a的不同版本出现,作如下修改就正确了
bundle C
version 1.0
import package a version 1