如何在OSGi中导入版本≥1.0.0的任意版本包?
解决OSGi导入包的版本范围问题
嘿,刚好对OSGi的版本范围规则比较熟,来给你理清楚!
首先,你需要的≥1.0.0且无上限的正确写法就是第一个尝试的:
com.mypackage.example;version="[1.0.0,)"
这个语法里,[1.0.0表示包含1.0.0版本本身,,)表示没有上限,所有1.0.0及以上的版本都会被匹配,完美排除了所有0.x系列的版本,完全符合你的需求。
接下来给你拆解下其他尝试的写法为啥不符合预期:
com.mypackage.example;version="[1,)":其实这个写法在OSGi里等价于[1.0.0,),因为版本号会自动补全缺失的分段为0,但直接写1.0.0会更清晰,避免后续看配置的人产生歧义。com.mypackage.example;version="[1.0.0]":这个是精确匹配唯一版本,只会导入1.0.0,拒绝所有1.0.1、2.0等更高版本,显然不符合你接受所有更高版本的需求。com.mypackage.example;version="[1.0.0)":这里的右括号)表示不包含起始版本,会直接排除1.0.0本身,只匹配1.0.1及以上的版本,和你要包含1.0.0的要求不符。
再补充下OSGi MANIFEST.MF里版本范围的核心规则,避免以后踩坑:
- 范围格式是
[下界,上界),其中方括号[代表包含该版本,圆括号(代表不包含 - 如果上界留空(即
,)),就表示没有版本上限,所有高于等于下界的版本都被允许 - 版本号的比较是按分段依次进行的,比如
0.9.9 < 1.0.0 < 1.0.1 < 2.0.0,所以[1.0.0,)天然就排除了所有0.x的版本
内容的提问来源于stack exchange,提问作者stiemannkj1
相关产品推荐
相关产品推荐

