Java 如何避免karaf加载默认解析包

Java 如何避免karaf加载默认解析包,java,osgi,karaf,apache-commons-lang3,Java,Osgi,Karaf,Apache Commons Lang3,我使用karaf来运行一个OSGI包,它使用一个内置的commons-lang3.5.jar 问题是,当我运行这个包时,karaf将自动加载另一个commons-lang3.1.jar。我不确定什么时候能装。但我的包裹被撞了 有没有办法卸载karaf默认内置捆绑包?没有,不要“卸载”默认内置捆绑包,因为它被其他人使用。 确保您自己的bundle对commons lang bundle进行了干净的导入 bnd指令如下所示: import-package: org.apache.commons

我使用karaf来运行一个OSGI包,它使用一个内置的commons-lang3.5.jar

问题是,当我运行这个包时,karaf将自动加载另一个commons-lang3.1.jar。我不确定什么时候能装。但我的包裹被撞了

有没有办法卸载karaf默认内置捆绑包?

没有,不要“卸载”默认内置捆绑包,因为它被其他人使用。 确保您自己的bundle对commons lang bundle进行了干净的导入

bnd指令如下所示:

import-package:
   org.apache.commons.lang;version="[3.5,4.0)", \
   *
这样,如果有比您自己已经包含的版本更好的版本,您就可以确保只导入commons lang

提示,不要嵌入依赖项,但要确保依赖于可重用的依赖项。使用这些导入包,您可以确保依赖于特定的版本

不,不要“卸载”默认内置包,因为它被其他人使用。 确保您自己的bundle对commons lang bundle进行了干净的导入

bnd指令如下所示:

import-package:
   org.apache.commons.lang;version="[3.5,4.0)", \
   *
这样,如果有比您自己已经包含的版本更好的版本,您就可以确保只导入commons lang


提示,不要嵌入依赖项,但要确保依赖于可重用的依赖项。使用这些导入包,您可以确保依赖于特定的版本

正如Achim所说,不要卸载默认捆绑包,而是指定所需的版本范围。但是,我建议您不要使用正常的OSGI版本范围,而是指定[3.5.0,3.5.0]

目前,最安全的做法是只导入使用点版本的COMMONS捆绑包,或者使用版本范围,从使用bnd baseline或类似工具确定与代码兼容的最低版本开始,并以构建所依据版本的完整版本号结束

例如,忽略所有次要版本: 在commons lang的版本
3.0
3.1
之间,唯一基线报告的api更改是两个包中的未成年人:
org.apache.commons.lang3
org.apache.commons.lang3.exception

但是,所有软件包都被升级到
3.1.0

3.1
3.2
,对几个包进行了一些小的更改:第二个小级别更改为
org.apache.commons.lang3
,最初的小级别更改为
org.apache.commons.lang3
org.apache.commons.lang3.reflect
org.apache.commons.lang3.text
org.apache.commons.lang3.text.translate
org.apache.commons.lang3.tuple

然而,对org.apache.commons.lang3.time进行了major更改

同样,所有的软件包版本都被设置为3.2.0,除了现在的软件包版本过于严格之外,还有一个隐藏的突破性的变化

换句话说:根据基线检测到的更改,将声明的导出包版本与更“准确”的包版本进行比较,我们有以下内容

请注意,对于仅进行微小更改的软件包,“准确”的软件包版本号反映了对该软件包进行微小更改的版本数,而不是任何特定版本的软件包号

Package | "Accurate" | Declared ------------------------------------------------------------------ = org.apache.commons.lang3 | 3.2.0 | 3.2.0 + org.apache.commons.lang3.builder | 3.0.0 | 3.2.0 + org.apache.commons.lang3.concurrent | 3.0.0 | 3.2.0 + org.apache.commons.lang3.event | 3.0.0 | 3.2.0 + org.apache.commons.lang3.exception | 3.1.0 | 3.2.0 + org.apache.commons.lang3.math | 3.0.0 | 3.2.0 + org.apache.commons.lang3.mutable | 3.0.0 | 3.2.0 + org.apache.commons.lang3.reflect | 3.1.0 | 3.2.0 + org.apache.commons.lang3.text | 3.1.0 | 3.2.0 + org.apache.commons.lang3.text.translate| 3.1.0 | 3.2.0 * org.apache.commons.lang3.time | 4.0.0 | 3.2.0 + org.apache.commons.lang3.tuple | 3.1.0 | 3.2.0 包装|准确|声明 ------------------------------------------------------------------ =org.apache.commons.lang3 | 3.2.0 | 3.2.0 +org.apache.commons.lang3.builder | 3.0.0 | 3.2.0 +org.apache.commons.lang3.concurrent | 3.0.0 | 3.2.0 +org.apache.commons.lang3.event | 3.0.0 | 3.2.0 +org.apache.commons.lang3.exception | 3.1.0 | 3.2.0 +org.apache.commons.lang3.math | 3.0.0 | 3.2.0 +org.apache.commons.lang3.mutable | 3.0.0 | 3.2.0 +org.apache.commons.lang3.reflect | 3.1.0 | 3.2.0 +org.apache.commons.lang3.text | 3.1.0 | 3.2.0 +org.apache.commons.lang3.text.translate | 3.1.0 | 3.2.0 *org.apache.commons.lang3.time | 4.0.0 | 3.2.0 +org.apache.commons.lang3.tuple | 3.1.0 | 3.2.0 1件包装的包装编号“正确”,10件包装的包装编号过于保守,1件包装的包装编号错误。 如果我们一直遵循3.5的模式,这一点将保持不变(在3.4和3.5之间对时间包进行第二次隐藏的重大更改:

Package | "Accurate" | Declared ------------------------------------------------------------------ = org.apache.commons.lang3 | 3.5.0 | 3.5.0 + org.apache.commons.lang3.builder | 3.3.0 | 3.5.0 + org.apache.commons.lang3.concurrent | 3.1.0 | 3.5.0 + org.apache.commons.lang3.event | 3.1.0 | 3.5.0 + org.apache.commons.lang3.exception | 3.2.0 | 3.5.0 + org.apache.commons.lang3.math | 3.2.0 | 3.5.0 + org.apache.commons.lang3.mutable | 3.2.0 | 3.5.0 + org.apache.commons.lang3.reflect | 3.4.0 | 3.5.0 + org.apache.commons.lang3.text | 3.3.0 | 3.5.0 + org.apache.commons.lang3.text.translate| 3.2.0 | 3.5.0 * org.apache.commons.lang3.time | 5.0.0 | 3.5.0 + org.apache.commons.lang3.tuple | 3.1.0 | 3.5.0 包装|准确|声明 ------------------------------------------------------------------ =org.apache.commons.lang3 | 3.5.0 | 3.5.0 +org.apache.commons.lang3.builder | 3.3.0 | 3.5.0 +org.apache.commons.lang3.concurrent | 3.1.0 | 3.5.0 +org.apache.commons.lang3.event | 3.1.0 | 3.5.0 +org.apache.commons.lang3.exception | 3.2.0 | 3.5.0 +org.apache.commons.lang3.math | 3.2.0 | 3.5.0 +org.apache.commons.lang3.mutable | 3.2.0 | 3.5.0 +org.apache.commons.lang3.reflect | 3.4.0 | 3.5.0 +org.apache.commons.lang3.text | 3.3.0 | 3.5.0 +org.apache.commons.lang3.text.translate | 3.2.0 | 3.5.0 *org.apache.commons.lang3.time | 5.0.0 | 3.5.0 +org.apache.commons.lang3.tuple | 3.1.0 | 3.5.0 [在我为COMMONS compress打开一个关于OSGI版本问题的问题后,我正在与一些COMMONS项目人员讨论软件包版本。对于这个项目,每个软件包的每个版本都与发行号相同(扩展到三位数字),并且都在[1,2]范围内

People commons超级项目因packageinfo文件位于源目录而挂起;可能是因为我从src树中添加了packageinfo文件的手动副本,这显然不再需要了。他们还希望包版本应该