首先需要了解的是bnd的相关知识:

1. API(也就是接口),

2. API Provider(接口的实现)

3. API Consumer( 接口的使用者)

OSGi中的一个版本有4个部分:
  major        1
  minor        1.1
  micro        1.1.1
  qualifier    1.1.1.qualifier

主版本 1
  次版本 1.1
  微版本 1.1.1
  限定符 1.1.1.qualifier

主版本           破坏前后兼容性变化
  次版本         向后兼容性变化
  微版本           bug的修复(非API变化)
  限定符        新的构建

Provider Policy其实就是接口实现的版本控制策略,API Provider需要导入API所在的包,那么它的版本变化是随着API所在包的次版本而变化的,例如如果API中添加一个新的方法(次版本发生变化),那么API Provider必须实现这个方法,要不然以后新的客户端调用这个方法时候,就没有实现。

Consumer Policy就是接口调用者的版本控制策略, Consumer Policy也需要导入API所在的包,它的版本变化是随着API所在包的主版本而变化的,因为即使API中添加了一个新方法,它也用不上,编译中也不会出现错误。但是如果API中删除一个方法(主版本发生变化),它就要发生变化了,因为它原来调用的方法可能已经被删除了,编译也就不能通过了。

以上,终于把这个以前困扰自己的问题解决了。

附上官方文档链接:http://bnd.bndtools.org/chapters/170-versioning.html

Provider Policy与Consumer Policy在bnd中的区别的更多相关文章

  1. 关闭provider进程或者consumer进程后,会发生什么?

    下图是 provider,consumer 和注册中心之间的拓扑图: provider,consumer 以及管理控制台都是 zookeeper 的客户端,所以都和 zk 建立了tcp连接. 以接口 ...

  2. js中== 和===中的区别

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. continue语句在for语句和while语句中的区别

    while语句的形式: while( expression ) statement for语句的形式: for( expression1; expression2;expression3 )   // ...

  4. Objective-C声明在头文件和实现文件中的区别

    Objective-C声明在头文件和实现文件中的区别 转自codecloud(有整理) 调试程序的时候,突然想到这个问题,百度一下发现有不少这方面的问答,粗略总结一下: 属性写在.h文件中和在.m文件 ...

  5. 在oracle中where 子句和having子句中的区别

    在oracle中where 子句和having子句中的区别 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用 ...

  6. import,reload,__import__在python中的区别

    import,reload,__import__在python中的区别 http://blog.csdn.net/five3/article/details/7762870 import作用:导入/引 ...

  7. 代码演示C#中string和StingBuilder内存中的区别

    关于 string和StringBuilder的区别参考MSDN.本文用程序演示它们在内存中的区别,及其因此其行为不同. //Demo  string memory model namespace C ...

  8. Lib作为“静态库”与“动态库”中的区别

    Lib作为“静态库”与“动态库”中的区别 0. 前言: 什么是静态连接库: 静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中.因此对应的链接方式称为静态链接. 为什么 ...

  9. vue.js引用出错-script代码块放在head和body中的区别

    这篇随笔是为了记录vue.js引用出错的原因,看到最后原来是vue.js代码放在head中不能正常使用,要最后发现要将其放在body中才行... 原来是js代码放在head和body中的区别问题,占个 ...

随机推荐

  1. Numpy数据的操作 * dot() multiply() 的区别

    使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,*  ...

  2. python基础-re正则

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过 ...

  3. python 日记 day3

    数据类型的概况:1.int 用于计算. 2.str 用于存储少量数据. 3.list 用于存储大量数据. 4.元祖 又叫只读列表,元素不可更改. 5. dic 用于存储关系型对象 . 6.集合 A.i ...

  4. Coreutils - GNU core utilities

    coreutils 是GNU下的一个软件包,包含linux下的 ls等常用命令.这些命令的实现要依赖于shell程序.一般在系统中都默认安装,也可自己安装或更新.例如,安装coreutils-6.7. ...

  5. 【vuex】vue2-happyfri

    我发现我对使用vuex并不擅长,现在跟我一起多多研究项目,好好补补vuex吧 这个开源项目地址为:https://github.com/bailicangdu/vue2-happyfri 这是一个答题 ...

  6. 如何处理HTML5新标签的浏览器兼容问题?

    方法一 : 1.使用静态资源的html5shiv包 <!--[if lt IE9]> <script src="http://cdn.static.runoob.com/l ...

  7. c++新特性实验(3)声明与定义:constexpr

    1.作用 constexpr 声明一个函数或变量,它的值可以在编译时出现在常量表达式之中. 2.constexpr 变量要求 其类型必须是 字面类型 (LiteralType) . 它必须被立即初始化 ...

  8. 获取MMSQL数据库表信息

    SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.n ...

  9. bzoj 2503 相框——思路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2503 我也知道应该只关注度数. #include<iostream> #incl ...

  10. JavaScript中[]+[] 、[]+{}、{}+[]、{}+{}的结果分析

    看到这样一个问题:{} + [] 的结果是多少? 一脸懵逼.. 于是在chrome控制台运行 {} + [] 和用 console.log({} + []) 输出,发现结果不一样.. 于是,把各种可能 ...