首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

osgi包可以从相同依赖项的不同版本导入包吗?

OSGi(Open Service Gateway Initiative)是一种面向Java的动态模块化系统,用于构建可扩展、可插拔的应用程序。在OSGi中,模块被组织为一系列的包(bundles),每个包都可以导出(export)一组Java类,供其他模块使用。

在OSGi中,可以从相同依赖项的不同版本导入包。这是通过使用版本范围(version range)来实现的。版本范围指定了可以接受的包版本的范围,例如"[1.0,2.0)"表示接受1.0及以上但不包括2.0的版本。当一个模块导入一个包时,可以指定版本范围,如果存在多个符合条件的版本,则选择最适合的版本。

这种能力使得在OSGi环境中可以同时存在多个版本的相同依赖项,每个模块可以选择适合自己的版本,避免了版本冲突的问题。这对于复杂的应用程序和系统来说非常有用,可以提供更高的灵活性和可扩展性。

在腾讯云的产品中,与OSGi相关的产品是腾讯云容器服务(Tencent Cloud Container Service),它提供了基于Kubernetes的容器管理服务,可以帮助用户快速构建、部署和管理容器化的应用程序。腾讯云容器服务支持使用OSGi来构建模块化的应用程序,并提供了丰富的功能和工具来简化容器的管理和运维工作。

更多关于腾讯云容器服务的信息,可以访问以下链接:

请注意,以上答案仅供参考,具体的产品选择和使用应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Salesforce 如何用一年时间大规模迁移到 OpenJDK 11

我们修复程序可以确保将自动模块所有自动添加到 VM 提供列表中,它被接受并被合并发布到了 OSGi 社区。...重复类是指具有相同 FQCN 但内容不同类。...这样可以隔离风险,因此,即使 Salesforce 应用程序及其依赖仍然是使用 OpenJDK 8 构建,在运行时,我们也可以利用一些 Java 9 才开始添加核心 Java API(例如,...Multi-release JAR 是在 Java 9 中引入一个新特性:它扩展了 JAR 文件格式,允许同一 Java 类资源多个版本共存于同一 JAR 文件中,其中该类每个版本可以是以不同方式实现并根据不同...我们 Servlet 容器和 OSGi 类加载器都支持多版本 JAR 文件,并且随着 JDK 11 及以上版本广泛使用,我们预计将有越来越多第三方依赖会使用这种格式打包。

70620

OSGi模块化和动态模块好处

JAR 带来问题是,A库依赖版本=2B库,但是C库又依赖版本=3B库,在标准java中,你是非常不幸。...在OSGi环境中,所有的软件都被非常仔细设定版本,只有这些包在相同类空间下它们才会被连接在一起协同工作。...相比之下,OSGi软件之间依赖可以准确知道是哪个软件提供类,通过减少搜索是启动速度提高一个重要因素。...很多开发者都想运行OSGi,但是他们公司并不允许他们部署通常JAR。因此,这些开发者可以将某个OSGi框架包括在WAR文件中,并将软件文件系统或通过网络装载到应用服务器中来运行。...15、非侵入 在一个OSGi环境中,不同软件均有自己环境设置,不同应用实际是都可以使用虚拟机提供所有设施,OSGi对此并无任何限制。

1.5K10

sofa-ark类隔离技术分析调研

我靠,你们这个依赖xx版本跟我们自己依赖xx版本不一样啊,会不会出锅? 我靠,我这个代码编译时候没问题啊,为啥一用你们组件就报一堆NoSuchMethodError啊。...哎,怎么我classpath里某个有三四个不同版本啊,跑时候到底用是哪个版本啊?不管了,反正差不多,先跑跑看。 哎,我怎么直接就可以用这个类了,这个类是哪个?...OSGI技术实际上是对代码进行了更高一级抽象,将“模块”作为一个基本单位,用Bundle对jar再进行一级权限管理,将一些导入或导出资源配置在Manifest文件里。...还好蚂蚁金服给我们提供了他们一个不错实践——Sofa-ark项目。 sofa-ark项目概念上其实并没有什么石破天惊独创,可以说他就是用FatJar技术去实现OSGI功能。...因为不同插件实在是会引入很多重复,会导致最终jar很大。虽然plugin层可以复用,但是还是会有一些重复jar

1.5K30

OSGI开发web应用

在左侧浏览面板中可以看到OSGi工程结构,“Plug-in Dependencies”下是OSGi插件运行需要组件,src目录下是自动生成源代码,simplewebosgi.Activator...是 Bundle生成周期管理类,可以监听组件启动和停止动作。...与普通Java工程所不同是向导会生成“META-INF”目录以及其下文件 MANIFEST.MF文件,此文件会随插件发布一起被打到jar中,定义了Bundle标识、版本、名称、运行环境等内容。...右边是可视化配置管 理器,在这里可以定义插件,配置插件运行所依赖组件及需要导入,运行时环境,编译构建配置等。...,这是在工程启动时候输出内容,然后输入ss,可以看到所有的Bundle都已经被加载进来 ?

1.6K40

深入探讨 Java 类加载器

不同类加载器为相同名称类创建了额外名称空间。相同名称可以并存在 Java 虚拟机中,只需要用不同类加载器来加载它们即可。...而使用接口做法则是把接口类放在客户端中,服务器上加载实现此接口不同版本类。在客户端通过相同接口来使用这些实现类。网络类加载器具体代码见 下载。...模块可以声明它所依赖需要导入(import)其它模块 Java 和类(通过 Import-Package),也可以声明导出(export)自己和类,供其它模块使用(通过 Export-Package...*,那么对于 com.example.core中类,都是由父类加载器来完成OSGi 模块这种类加载器结构,使得一个类不同版本可以共存在 Java 虚拟机中,带来了很大灵活性。...如果一个类库被多个模块共用,可以为这个类库单独创建一个模块,把其它模块需要用到 Java 声明为导出。其它模块声明导入这些类。

74340

深入探讨 Java 类加载器

不同类加载器为相同名称类创建了额外名称空间。相同名称可以并存在 Java 虚拟机中,只需要用不同类加载器来加载它们即可。...而使用接口做法则是把接口类放在客户端中,服务器上加载实现此接口不同版本类。在客户端通过相同接口来使用这些实现类。网络类加载器具体代码见 下载。...模块可以声明它所依赖需要导入(import)其它模块 Java 和类(通过 Import-Package),也可以声明导出(export)自己和类,供其它模块使用(通过 Export-Package...*,那么对于 com.example.core中类,都是由父类加载器来完成OSGi 模块这种类加载器结构,使得一个类不同版本可以共存在 Java 虚拟机中,带来了很大灵活性。...如果一个类库被多个模块共用,可以为这个类库单独创建一个模块,把其它模块需要用到 Java 声明为导出。其它模块声明导入这些类。

56020

Java9来了,快来了解下JPMS基础吧!

OSGi和JBoss模块在没有JVM直接支持下而存在,但依然为模块提供一些额外支持。它是通过在其自己类加载器中启动每个模块来实现,这样做是可以,但也有自己问题。...它也是一个.java文件,但是,语法与以前见过任何.java文件无关,是完全不同。 在编辑这个文件时候,你通常需要思考两个关键问题: 1、该模块依赖什么。 2、它导出什么。...你不能将相同模块名称加载两次 - 你不能同时加载两个相同模块两个版本。因此,你构建工具可以创建一个可实际运行连贯模块。因此,由于冲突版本引起类路径地狱状况尚未解决。...请注意,将版本号放在模块名称中是一个坏主意,它不能解决这个问题并创建其他。 两个模块可能不包含相同。这似乎是非常明智,直到你认为它也适用于隐藏。...你依赖是否模块化?理论上,只要你所有依赖也是模块,你只能将代码转换为模块。对于任何一个有数百个jar文件依赖关系大型应用程序,这就是一个大问题。

2.7K80

Maven依赖Jar冲突排查及解决

前言 什么是依赖冲突? 依赖冲突是指项目依赖某一个jar,有多个不同版本,因而造成了版本冲突。...,经个人测试下面的是正确: 最短路径原则: 面对多级(两级及以上)不同依赖,会优先选择路径最短依赖; 声明优先原则: 面对多级(两级及以上)同级依赖,先声明依赖会覆盖后声明依赖;...) All Dependencies as Tree(树形式查看所有依赖,冲突依赖会红字显示) 注意 排查冲突时候推荐使用第二种方式找到冲突,搜索冲突用第三种方式排除冲突。...图中可以看出有哪些jar存在冲突,存在冲突情况下最终采用了哪个依赖版本。 标红就是冲突版本,白色是当前解析版本。...,但遇到必须使用不同版本jar时,就不行了 sofa-ark 用FatJar技术去实现OSGI功能,jar隔离原理上跟osgi一致,不过基于fat jar技术,通过maven 插件来简化复杂度,比较轻量

74840

OpenDaylight开发学习十问十答

还有就是需要了解一下OSGi规范,网上可以找到中文规范,推荐4.0以后版本。同时了解一下Karaf,看看OSGi规范和karaf之间关系,这个过程可能也会花费一两个星期。...执行mvn clean install时增加参数-e,打印详细异常堆栈,增加参数-X,打开Maven调试标记运行,查看完整依赖踪迹。 5 版本加载运行出错 OSGi规范看了吗?...我很想告诉大家秘诀,可惜没有,只能自己仔细分析模块间依赖关系,Import-Package,Export-Package匹配路径冲突了吗?具体问题具体分析。...mdsal相关接口,功能及形式与controller子项目里几乎一致,只是路径不同。...最新发布版本里还在用?Blueprint和配置子系统关系?

98380

SDNLAB技术分享(二):Toaster示例初探ODL MD-SAL架构

步骤三:根据yang定义属性和接口分别实现consumer和provider两个osgi bundle。而实现这两个bundler,都要依赖之前yang文件自动生成java代码。...步骤二:eclipse导入sample工程(不需要导入整个ODL代码,只要导入Sample文件夹里代码即可) ? 步骤三:导入成功后maven会下载相关依赖jar。...Q&A 广州_追网球猫 请问MD-SALLi版开发和He版开发相同? 大概开发流程是相同,可能有些细节不太一样。这个要查一下版本发布说明,wiki例子是基于Helium版本。...杭州-嗔戒 请问关于部署问题能不能讲一下,部署jar放置具体是怎么一个方式 wiki上例子是作为osgi bundle安装在odl中。...安装好后可以通过HTTP请求来调用restconftoaster接口。 胖子@南京 不部署到控制器里面,单独bundle可以可以,要依赖ODLMD-SAL框架。

900100

模块化服务规范——OSGI

现在OSGi规范已经用于移动电话到开源Eclipse(其中包括了与IBMOSGi框架SMF兼容开源版本)。...您可以通过这些容器,把您应用程序劈分为多个模块单元,这样,您就可以更容易地管 理这些模块单元之间交叉依赖关系。 OSGi主要职责就是为了让开发者能够建动态化、模块化Java系统。...2、JAR文件规范粒度太粗,没有足够约束力。运行期,如果这些第三方Jar不存在,或者命名存在差异,或者提供了不同JAR版本,则会出现各种不同结果。...3、由于Java EE平台规范没有针对Java package引入版本支持,这使得在同一企业应用中几乎不可能启用同一JAR不同版本。...OSGI优缺点 a) 您可以在不重启容器情况下,动态地安装、卸载、启动和停止您应用程序中不同模块; b) 对于您应用程序中某一特定模块,容器可以同时运行该模块多个版本; c) OSGi为开发嵌入式应用

1.5K30

微内核架构(Microkernel Architecture)二

OSGi 一方面指维护 OSGi 规范 OSGI 官方联盟,另一方面指的是该组织维护基于 Java 语言服务(业务)规范。简单来说,OSGi 可以认为是 Java 平台模块层。...特点: 可以动态加载、更新和卸载模块而不用停止服务 实现系统模块化、版本化,允许多版本 bundule 同时服务 Service model 允许模块/插件相互依赖但松耦合,分享服务更简单 2.3 OSGi...例如,Bundle 名称、描述、开发商、classpath,以及需要导入和输出等,OSGi 核心系统会将这些信息加载到系统中用于后续使用。...OSGi 提供了一个服务注册功能,用于各个插件将自己能提供服务注册到 OSGi 核心服务注册中心,如果某个服务想用其他服务,可以直接在服务注册中心搜索可用服务。...三 规则引擎架构 3.1 简析 规则引擎结构上来看,也属于微内核架构一种具体实现,其中执行引擎可以看作是微内核,执行引擎解析配置好业务流,执行其中条件和规则,通过这种方式来支持业务灵活多变。

74530

Java基础-类加载器和核心机制

注意:被两个类加载器加载同一个类,JVM不认为是相同类。...OSGi 已经被实现和部署在很多产品上,在开源社区也得到了广泛支持。Eclipse 就是基于 OSGi 技术来构建。 原理: OSGi每个模块(bundle)都包含 Java 和类。...模块可以声明它所依赖需要导入 (import)其它模块 Java 和类(通过 Import-Package),也可以声明导出( export)自己和类,供其它模块使用(通过 Export-Package...也就是说需要能够隐藏和共享一个模块中某些 Java 和类。这是通过 OSGi 特有的类加载器机制来实现OSGi每个模块都有对应一个类加载器。它负责加载模块自己包含 Java 和类。...当它需要加载所导入 Java 类时,它会 代理给导出此 Java 类模块来完成加载。模块也可以显式声明某些 Java 和类,必 须由父类加载器来加载。

53820

Go Module Notes

module 是包含了 Go 源文件目录树,并在根目录中添加了名为 go.mod 文件。go.mod 包含模块导入名称,声明了要求依赖,排除依赖和替换依赖。... Go modules 角度来说,一个,如果两个主要版本不同的话,那这它们相当于两个完全不同。...“如果旧软件和新软件具有相同导入路径,则新软件必须向后兼容旧软件。”...- go modules wiki 不同版本同一个 Go 模块,使用了不同 module path —— v2 开始,module path 结尾一定要跟上主要版本号。...如此一来导入路径发生了变化,也不用担心名称相同对象需要向后兼容限制了,因为golang认为不同导入路径意味着不同

1.4K10

深入JVM类加载器机制,值得你收藏

URLClassLoader提供了这个功能,它让我们可以通过以下几种方式进行加载: 文件: (文件系统目录加载) jar: (Jar进行加载) Http: (远程Http服务进行加载...作为开发者,遇到这种冲突问题,如果不借助类隔离框架,只能耗费精力升级到统一版本 所谓类隔离就是应用程序中不同使用不同类加载进行加载,比如消息中间件使用M类加载器加载,微服务使用N类加载器加载,这样...他原理就是通过独立类加载器加载相互冲突三方依赖,从而做到隔离冲突,怎么实现呢?...原因是Ark Plugin,它是 SOFAArk 框架定义一种特殊JAR文件格式,在遇到冲突时,用户可以使用Maven插件将若干冲突包打包成Plugin,运行时由独立 PluginClassLoader...还有Tomcat应用间类加载隔离能力,比如:在一个Tomcat内部署多个应用,甚至多个应用内使用了某个类似的几个不同版本,但它们之间却互不影响。

57520

编译了三个版本Tomcat源码后,我才发现这个bug

模块有五六个,发布时最大问题就是每个都很大,主要是各个模块 WEB-INF/lib 下包含大量相同 jar ,因此有必要将公共摘出来放到 Tomcat 共享目录下。...理论上,同一个 Tomcat 下部署多个应用时,可以将所有共享 jar 放在 shared/lib 目录下,然后配置 shared.loader 就可以了。...所以,决定源头来搞明白这个类加载过程,在编译 Tomcat 版本下断点跟踪一下到底是怎么回事儿。第一件事儿,先编译 Tomcat 源码。...Tomcat 源码编译 Tomcat 源码导入 IDEA 过程比较简单,步骤为: 1.下载 ANT 工具,最新版本为 1.10.9,配置环境变量 ANT_HOME: ?...【我是将纯第三方 jar ,无相关依赖】 为什么只 WEB-INF/lib 下只保留某个应用自身 jar 而且包含 SpringBoot starter 依赖,还是报类异常?

69620

Go包管理工具(三):Go Modules

模式匹配当前模块中所有。 go build 将根据需要自动添加缺失或未转换依赖,以满足此特定构建调用导入: $ go build ./... 测试模块 $ go test ./......或者可以直接编辑 go.mod 。 此外,像 go build,go test 或甚至 go list 这样命令会根据需要自动添加新依赖以满足导入。...“如果旧软件和新软件具有相同导入路径,则新软件必须向后兼容旧软件。”...这样导入路径发生了变化,也不用担心名称相同对象需要向后兼容限制了,因为 golang 认为不同导入路径意味着不同。...v2+ 版本允许和其他不同版本同时存在(前提是添加了/vN),它们将被当做不同来处理。

1.4K21

「数字体验」Liferay数字体验平台(DXP)好处

例如,您安装上运行了Wiki(特性)一个版本,您现在可以根据该特性中新需求进行更改,使用不同版本控制,并且应用程序可以使用经过修改版本控制服务。...甚至旧版本和新版本可以在同一个实例中使用 好处: 你现在可以有更新beta版本功能供用户使用,而不会影响当前功能。另一个好处是实例化-相同可以在同一个实例不同形式。...架构在非常基础层次上发生了变化,应用程序被划分为使用OSGi框架不同。这几乎改变了Liferay所有工作方式。...现在每个portlet都以微服务形式与另一个portlet通信,这与早期版本IPC不同。所有portlet属性现在都很容易公开,并且可以跨portlet使用。...您将创建功能丰富并以惊人速度运行应用程序。 谁受益最大: 每个人。谁不喜欢快速浏览体验呢! 覆盖EXT和Hook DXP现在提供了OSGi/模块和服务抽象实现。

1.6K10

编译了三个版本Tomcat源码后,我才发现这个bug

模块有五六个,发布时最大问题就是每个都很大,主要是各个模块 WEB-INF/lib 下包含大量相同 jar ,因此有必要将公共摘出来放到 Tomcat 共享目录下。...理论上,同一个 Tomcat 下部署多个应用时,可以将所有共享 jar 放在 shared/lib 目录下,然后配置 shared.loader 就可以了。...所以,决定源头来搞明白这个类加载过程,在编译 Tomcat 版本下断点跟踪一下到底是怎么回事儿。第一件事儿,先编译 Tomcat 源码。...Tomcat 源码编译 Tomcat 源码导入 IDEA 过程比较简单,步骤为: 1.下载 ANT 工具,最新版本为 1.10.9,配置环境变量 ANT_HOME: ?...【我是将纯第三方 jar ,无相关依赖】 为什么只 WEB-INF/lib 下只保留某个应用自身 jar 而且包含 SpringBoot starter 依赖,还是报类异常? ---- ?

41220

详解Python虚拟环境原理及使用

虚拟环境为一系列潜在问题提供简单解决方案,尤其是在以下几个方面: 允许不同项目使用不同版本程序,从而解决依赖性问题。...例如,可以将Project A v2.7用于Project X,并将Package A v1.3用于Project Y。 通过捕获需求文件中所有依赖,使项目自包含且可重现。...虚拟环境是用于依赖管理和项目隔离Python工具,允许Python站点(第三方库)安装在本地特定项目的隔离目录中,而不是全局安装(即作为系统范围内Python一部分)。...-r requirements.txt将项目的依赖安装在活动虚拟环境中。...如果运行项目的虚拟环境外部而来相同脚本会发生什么?

2.6K20
领券