开放服务网关协议 (Open Services Gateway Initiative),简称 OSGi,OSGI 为Java平台提供了动态模块化的特性,但是没有对Java底层实现如类库和Java虚拟机等修改.OSGi 的体系架构是基于插件式的软件结构,包括一个 OSGi 框架和一系列插件,在 OSGi中,插件称为 Bundle,Bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且 jar 包的物理边界也同时是运行时逻辑模块的封装边界,

1. 普通jar包和osgi的bundle包有什么不同

最大的区别META-INF/MANIFEST.MF文件内容有差别,MANIFEST.MF文件主要的作用就是记录jar包的一些信息

1. 普通包中的MANIFEST.MF

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.2.2 (Sun Microsystems Inc.)
Extension-Name: org.apache.commons.logging
Specification-Title: Jakarta Commons Logging
Specification-Vendor: Apache Software Foundation
Specification-Version: 1.0
Implementation-Title: Jakarta Commons Logging
Implementation-Vendor-Id: org.apache
Implementation-Vendor: Apache Software Foundation
Implementation-Version: 1.1

其中

  • Manifest-Version 用来定义manifest文件的版本,例如:Manifest-Version: 1.0
  • Created-By 声明该文件的生成者,一般该属性是由jar命令行工具生成的
  • Signature-Version 定义jar文件的签名版本
  • Class-Path 应用程序或者类装载器使用该值来构建内部的类搜索路径
  • Main-Class 定义jar文件的入口类,该类必须是一个可执行的类
  • Extension-Name 该属性定义了jar文件的标识
  • Implementation-Title   定义了扩展实现的标题
  • Implementation-Version   定义扩展实现的版本
  • Implementation-Vendor   定义扩展实现的组织
  • Implementation-Vendor-Id   定义扩展实现的组织的标识
  • Implementation-URL :   定义该扩展包的下载地址(URL)
  • Specification-Title   定义扩展规范的标题
  • Specification-Version   定义扩展规范的版本
  • Specification-Vendor   声明了维护该规范的组织

2. OSGI中bundle包MANIFEST.MF文件

Manifest-Version: 1.0
Export-Package: org.apache.commons.logging;provider="slf4j";version="1.1.1",org.apache.commons.logging.impl;provider="slf4j";version="1.1.1";uses:="org.apache.commons.logging,org.slf4j,org.slf4j.spi"
Implementation-Title: jcl-over-slf4j
Implementation-Version: 1.6.1
Built-By: ceki
Tool: Bundlor 1.0.0.RELEASE
Bundle-Name: SLF4J Jakarta Commons Logging Over SLF4J Binding
Created-By: Apache Maven
Bundle-Vendor: SpringSource
Build-Jdk: 1.6.0_16
Bundle-Version: 1.6.1
Bundle-ManifestVersion: 2
Bundle-Description: JCL 1.1.1 implementation over SLF4J
Bundle-SymbolicName: com.springsource.slf4j.org.apache.commons.logging
Import-Package: org.slf4j;version="[1.6.1, 1.6.1]",org.slf4j.spi;version="[1.6.1, 1.6.1]"
Archiver-Version: Plexus Archiver

MANIFEST.MF文件格式

  1. 属性声明的一般格式是 name: value
  2. 一行不超过 72 个字符,下一行则由单个空格字符开始
  • Bundle-Name 指bundle名称
  • Bundle-Description: Bundle的一个简单描述
  • Bundle-Vendor 指bundle发布商
  • Bundle-Version 指bundle发布版本 默认为:0;
  • Bundle-Activator: 指定一个当Bundle Activated时调用的类
  • Bundle-ManifestVersion 定义了bundle遵循规范的规则 对OSGi3而言是1对OSGi4而言是2
  • Bundle-SymbolicName 定义的唯一bundle名称 (必须)
  • Bundle-UpdateLocation描述 bundle 的更新地址。bundle 需要更新,则使用这个地址进行更新
  • Import-Package 定义的引用包括包名称和版本号,只有引用了这些包,才能让classloader装载
  • Export-Package 该属性指定要公共暴露给其他插件的所有包
  • Require-Bundle 指定 bundle 中需要其他 bundle 导出的内容

因此 一般是通过MANIFEST.MF来区分是osgi可使用的bundle包还是普通jar包

2.如何将普通jar包转换成bundle包

创建新工程选择 Plug-in from  Existing JAR Archives

选择需要处理的JAR包

设置工程信息选择OSGI标准运行

完成创建工程如下图

选择创建工程邮件Export导出

选择路径下会存在\plugins的文件夹, 文件夹中就是转换后的jar包

普通jar包和osgi的Bundle包相关推荐

  1. osgi 如何引入包_OSGi Testsuite:引入类名过滤器

    osgi 如何引入包 OSGi Testsuite是一个JUnit测试运行程序 ,它动态地收集要执行的测试类. 它已经由我的同伴Rüdiger大约一年前出版,并且已经在某些项目中证明有用. 但是对于g ...

  2. PBR游戏3D模型合集包 PBR Game 3D-Models Bundle February 2022

    PBR游戏3D模型捆绑包2022年2月 大小解压后:6.99G MAX| OBJ | FBX |TEX  模型获取:PBR游戏3D模型合集包 PBR Game 3D-Models Bundle Feb ...

  3. jar打包 剔除第三方依赖以及它的依赖_maven打包成第三方jar包且把pom依赖包打入进来的方法...

    添加此PLUGIN到项目的POM.XML中 maven-assembly-plugin com.allen.capturewebdata.Main jar-with-dependencies 如果出现 ...

  4. 【转】iOS-生成Bundle包-引入bundle-使用bundle

    在我们使用第三方框架时,常常看到XXX.bundle的文件. 我们找到该文件,显示包内容,大致看到很多资源文件:图片.配置文本.XIB文件-- 什么是Bundle文件? 简单理解,就是资源文件包.我们 ...

  5. Maven之——使用本地jar包并打包进war包里面的方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52594602 很显然,这种方法是很不可取的,因为Maven是用来团队合作,以及发布 ...

  6. 有关两个jar包中包含完全相同的包名和类名的加载问题

    首先从表现层介绍,后续后深入原理. 1,先简单介绍maven如何生成jar文件方便测试 <plugin><artifactId>maven-assembly-plugin< ...

  7. bundle包是什么意思_【Xcode小技巧】生成Bundle包

    参考文章 制作APP中,我们可以用bundle来管理资源文件. 一.什么是Bundle文件 简单理解,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个Bundle文件.方便在其他 ...

  8. Maven 打包成第三方jar包且把pom依赖包打入进来的方法

    <Maven 打包成第三方jar包且把pom依赖包打入进来的方法> 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! <Maven 打包成第三方jar包且把po ...

  9. 分享一个java输出pdf的依赖包,非maven,包名:spire.pdf.jar 下载

    分享一个java输出pdf的依赖包,非maven,包名:spire.pdf.jar http://repo.e-iceblue.cn/#browse/browse:maven-public:e-ice ...

最新文章

  1. 每天一点点之 taro 框架开发 - taro路由及传参
  2. Android仿QQ复制昵称效果2
  3. thinkphp内置标签简单讲解
  4. 工作191:loading不声明
  5. C++ primer第十八章 18.1小结 异常处理
  6. WinCE程序的几种开发方法
  7. JavaScript之event事件
  8. 荣耀青春30青春版能升鸿蒙,或是新一代拍照神器 荣耀30青春版今日发布
  9. 第3章 神经网络的最优化
  10. python飞机大战游戏素材_python实现飞机大战小游戏
  11. 金融风控建模评分卡系列:机器学习特征选择方法
  12. 溯光者:超简单,一文读懂显卡型号编码数字、字母怎么看,都是什么意思?
  13. 嫌我们理科生不够浪漫?你有一份音乐数学入门指南待查收
  14. indexOf 的使用
  15. Java 动态代理,invoke() 自动调用原理,invoke() 参数
  16. JS - 将tree(树形)数据结构格式改为一维数组对象格式(扁平化)
  17. 阿里云使用笔记-第三篇-使用阿里云App连接实例
  18. 打标工具brat的安装与使用
  19. 大数据培训需要有基础吗
  20. 值班排班日历插件引入 参考

热门文章

  1. Windows系统设置电源模式为平衡时关闭CPU睿频
  2. Latex使用algorithm2e包生成伪代码 跨栏、换行方法。
  3. 超线程技术(HT, HyperThreading)概述
  4. DRF如何序列化外键的字段
  5. 【Tableau 星球】如何快速学习Tableau?(附带学习资源)
  6. recursive neural network
  7. mysql日期隐式转换_mysql中的隐式转换
  8. SAS与微软,颠覆全球数据分析与AI市场
  9. 解决Android平台移植ffmpeg的一揽子问题
  10. fputc和fgetc详解