what is bundle?

来源:互联网 发布:Mac爱奇艺视频转换mp4 编辑:程序博客网 时间:2024/05/22 06:39

在OSGI中所有模块的部署都必须以Bundle的方式进行部署,即在osgi中,bunlde是最小的部署单元,osgi即是java模块化编程中的一个模块。

那么到底什么是Bundle呢?
Bundle其实就是一个jar文件,这个jar文件和普通的jar文件唯一的不同地方就是META-INF目录下的MANIFEST.MF文件的内容,
关于Bundle的所有信息都在MANIFEST.MF进行描述,说得时髦点,可以称它为bundle的元数据,这些信息中包含有象bundle的
名称、id、描述、开发商、classpath、需要导入的包以及输出的包等信息。
bundle是一个独立的概念,在osgi框架中对于每个bundle采用的是独立的classloader机制,这也意味着不能采用传统的
如引用其他bundle的工程来实现bundle间的协作了,那么bundle之间是怎样协作的呢,在osgi框架中对于每个bundle可以定义
输出的包以及引用的包,这样在bundle间就可以共享包中的类了,尽管这样也可以实现简单的bundle的协作,
但在osgi框架中更加推荐的是采用service方式,service-oriented的概念(例如soa)大家都接触多了,osgi框架同样如此,每
个bundle可以通过BundleContext注册对外提供的服务,同时也可以通过BundleContext来获得需要引用的服务,
采用Service-Oriented的方式可以使得对外提供的服务能够更加的封装,不需要为了使用别的Bundle提供的Service而做环境依
赖等设置,同时Bundle还可以采用Required-Bundle的方式来直接引用其它的bundle(相当于引用其它bundle的工程或jar)。