osgi导出包和非导出包_了解如何解决OSGI捆绑包
osgi导出包和非导出包
捆绑包解决规则
对于每个Import-Package包声明,必须有一个具有相同包的对应Export-Package
捆绑包还可以将其他属性附加到它导入或导出的包中。 如果我们在示例中添加了version属性,该怎么办:
Bundle-Name: Bundle A
Import-Package: org.apache.foo;version="1.2.0"
Bundle-Name: Bundle B
Export-Package: org.apache.foo;version="1.2.0"
请注意,反之则不然......如果捆B出口版本1.2.0,则不需要捆绑到指定版本1.2.0。 它可以使用此导入并解决问题:
Bundle-Name: Bundle A
Import-Package: org.apache.foo
Import-Package准确规定了它需要的版本(或属性),并且必须存在具有相同属性的相应Export-Package
Bundle-Name: Bundle A
Import-Package: org.apache.foo;version="1.2.0"
Bundle-Name: Bundle B
Export-Package: org.apache.foo;version="1.2.0"
Bundle-Name: Bundle C
Export-Package: org.apache.foo;version="1.2.0"
捆绑软件A使用哪个捆绑软件?
答案是,这取决于首先安装了哪个捆绑包(B或C)。
当找到多个具有相同版本的软件包时,首先安装的软件包用于满足依赖性
Bundle-Name: Bundle D
Export-Package: org.apache.foo;version="1.3.0"
从上面我们可以看到,捆绑软件A(1.2.0)中的版本声明表示最低版本为1.2.0; 因此,如果有更高版本可用,它将选择该版本(本例中为Bundle D版本1.3.0)。 但是,这将我们带到了束分解的另一个时间规则:
已解决的捆绑包比未解决的捆绑包具有更高的优先级
原因是OSGI框架倾向于支持给定捆绑软件的可重用性。 如果已解决,并且新的捆绑软件需要它,那么即使不需要,它也不会尝试拥有同一软件包的许多其他版本。
捆绑“使用”指令
public class FooClass {public BarClass execute(){ ... }
}
Bundle-Name: Bundle A
Import-Package: org.apache.bar;version="3.6.0"
Export-Package: org.apache.foo;version="1.2.0"
到目前为止,只要有另一个捆绑包可以正确导出具有正确版本的org.apache.bar ,一切就可以了。
Bundle-Name: Bundle B
Export-Package: org.apache.bar;version="3.6.0"
这两个捆绑包可以解决。 现在,如果我们再安装两个捆绑包,捆绑包C和捆绑包D如下所示:
Bundle-Name: Bundle C
Import-Package: org.apache.foo;version="1.2.0", org.apache.bar;version="4.0.0"
Bundle-Name: Bundle D
Export-Package: org.apache.bar;version="4.0.0"
Bundle-Name: Bundle A
Import-Package: org.apache.bar;version="3.6.0"
Export-Package: org.apache.foo;version="1.2.0"";uses:=org.apache.bar
使用Apache Karaf
首先要做的是启动karaf。 在普通发行版中,不应安装捆绑软件。 通过在karaf命令行中执行“ osgi:list”来验证这一点。 按照顺序,我们将测试上面给出的规则。
对于每个Import-Package包声明,必须有一个具有相同包的对应Export-Package
Import-Package准确规定了它需要的版本(或属性),并且必须存在具有相同属性的相应Export-Package
让我们安装捆绑软件C:“ osgi:install -s mvn:explore-bundle-resolution / bundleC / 1.0? 再次列出捆绑软件,您将看到尽管捆绑软件C依赖于org.apache.foo,但它指定的Import-Package的特定版本为1.5。 没有解决的版本1.5,因此捆绑软件C也将无法解决。 捆绑包D恰巧导出了版本等于1.5的软件包org.apache.foo。 使用-s启动捆绑软件D,就像安装其他捆绑软件一样安装它。 现在尝试解析捆绑软件C,它应该可以工作(“ osgi:resolve bundle id ”)。
当找到多个具有相同版本的软件包时,首先安装的软件包用于满足依赖性
已解决的捆绑包比未解决的捆绑包具有更高的优先级
捆绑“使用”指令
参考:在Christian Posta Software博客上,从我们的JCG合作伙伴 Christian Posta 了解如何解决OSGI捆绑 软件 。
翻译自: https://www.javacodegeeks.com/2012/05/understanding-how-osgi-bundles-get.html
osgi导出包和非导出包
osgi导出包和非导出包_了解如何解决OSGI捆绑包相关推荐
- 常用jar包_几个解决 Maven Jar 包冲突的小技巧.
前言 大家在项目中肯定有碰到过Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException.明明在依赖里有这个Jar包啊 ...
- unity创建项目不添加包_使用精选的资产捆绑包和Unity Learn Premium可以更高效地创建项目
unity创建项目不添加包 For a limited time, we're bundling and discounting some of our most popular assets and ...
- Java导出Excel公式非空判断_使用poi导成excel的一个类型判断函数
/** * 获取cell中的数据 * @param cell * @return */ private String readCell(HSSFCell cell) { if (null == cel ...
- 眼图 非差分线_利用眼图解决USB在布线中的信号完整性问题
EDA365欢迎您登录! 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 lifree 于 2020-2-5 14:37 编辑 2 ]3 p' D% B4 \ {/ n # V&am ...
- 了解如何解决OSGI捆绑包
我想回顾一下OSGI包如何解决并使用Apache Karaf进行演示. Karaf是基于Apache Felix内核的功能齐全的OSGI容器,并且是Apache ServiceMix集成容器的基石. ...
- Facebook Instant Game 捆绑包配置方法
捆绑包配置 小游戏的一些配置可以通过开发者门户或游戏捆绑包中嵌入的专用 JSON 文件来实现.在开发者门户中更新某个值时,将全局更改所有游戏版本中的这个值,而捆绑包配置只会更改某个特定捆绑包中的这个值 ...
- Netty解决TCP粘包/拆包导致的半包读写问题
一.TCP粘包/拆包问题说明 TCP是个"流"协议,就是没有界限的一串数据.TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包拆分,所以在业务上认为,一 ...
- R语言数据导出(数据保存、导出、持久化到本地指定目录文件)、使用foreign包的write.dta函数将dataframe导出为Stata格式dta文件
R语言数据导出(数据保存.导出.持久化到本地指定目录文件).使用foreign包的write.dta函数将dataframe导出为Stata格式dta文件 目录
- 【Unity入门】资源包导入和导出
[Unity入门]资源包导入和导出 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (1)资源目录 Unity的资源(模型,场 ...
最新文章
- K-means聚类自定义距离计算
- Ouroboros:一个可证明安全的PoS区块链协议 (共识介绍)
- 深度学习和目标检测系列教程 8-300:目标检测常见的标注工具LabelImg和将xml文件提取图像信息
- oracle定时器在项目中的应用
- 三级嵌入式 汇编指令汇总
- 前端学习(3148):react-hello-react之getSnapBeforeUpdate
- Hadoop—如何查看HDFS默认的ns命名空间和所有命名空间列表
- bzoj1596[Usaco2008 Jan]电话网络*
- 基于verliog的异步模10计数器(含模块代码以及测试代码)
- GalForUnity简介
- 微信刷票python代码_微信刷票漏洞详解, Python脚本实现一秒破万!
- 【Android】自定义View、画布Canvas与画笔Paint
- 2021年「博客之星」参赛博主:尔嵘
- 这十个嵌入式工程师最青睐的树莓派扩展板让你受用半生
- Phonetic symbol 清辅音 - θ 与 s
- iPhone 12 pro max卡槽怎么插双卡
- 香农编码C程序及演示结果
- 如何在Tableau Desktop中创建自定义调色板 - 优阅达
- 月入过万——网店推广实战方法(第2版)
- 基于STM32F103C8T6的HC-06蓝牙通信
热门文章
- 关于Java序列化你应该知道的一切
- 【最全最详细】publiccms实现将公共部分提取成单独模块引入
- 子列表只是原列表的一个视图
- 压力与动力是否成正比?
- Gradle 简单使用
- MySQL8.0: Serialized Dictionary Information(SDI) 浅析
- java登录界面命令_Java命令行界面(第25部分):JCommando
- 因此,Oracle杀死了java.net
- java ab工具_(ab)使用Java 8 FunctionalInterfaces作为本地方法
- owin 怎么部署在云中_使用Boxfuse轻松在云中运行Spring Boot应用程序