【OSGI】用OSGI解决JAR包冲突

本文介绍了如何利用OSGI(Open Service Gateway Initiative)框架解决Java项目中的JAR包冲突问题。通过理解OSGI的基本概念,如Bundle的隔离和交互,以及Service的注册与获取,可以有效地管理和隔离不同版本的类。文章还详细讲解了Apache Felix框架的使用,包括配置maven bundle插件来暴露和引入包,以及如何在不同Bundle之间共享和获取Service。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.简介

2.基本概念

2.1 Bundle

2.1.1 隔离

2.1.2 交互

2.2 Service

3.框架felix使用

3.1加载并解析jar为Bundle

3.2 Bundle的Classloader的隔离机制以及类共享机制

3.2.1 maven bundle插件export

3.3 使用方B获取


1.简介

OSGi(Open Service Gateway Initiative),The Dynamic Module System For Java,从这个定义可见,OSGi的主要职责就是为了让开发者能够构建动态化、模块化的Java系统。此处要讲的是利用这个技术解决Jar包冲突问题,在一个maven项目中如果依赖的jar包存在版本冲突,或者其传递的依赖冲突,会被maven仲裁出一个来加载,因为其类全限定名完全一样只能加载一个。利用OSGI核心原理就是通过不同的类加载器(类似于命名空间)来隔离同一个类(全限定名)的不同版本,从而解决冲突。

2.基本概念

2.1 Bundle

Bundle就是一个特殊的jar包,特殊的在META-INF目录下的MANIFEST.MF文件中加入了OSGi特定描述。如下

2.1.1 隔离

为什么要隔离各个bundle呢?由于应用一旦臃肿,依赖很多jar包,jar包传递的依赖可能存在冲突。

核心原理是利用ClassLoader当作命名空间,每个Bundle都有自己独立于其他Bundle的ClassLoader,正因为这样,各个Bundle内部的类是隔离的。

2.1.2 交互

一个孤岛注定啥也干不了,一个独立的budle有啥用呢?引入一个bundle一定是使用方需要用到,怎样使用呢?

一个Bundle可能会用到另外Bundle的类,Bundle之间是要交互的,这是怎么实现的呢?本文主要介绍Service方式

Bundle间交互方式  
1.通过PackageExportImoprt来进行

提供者Bundle对外暴露(Export)自己的一个或多个Package,

使用者Bundle则根据自己的需要导入(Import)一个或多个Package。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值