Java 如何避免karaf加载默认解析包
我使用karaf来运行一个OSGI包,它使用一个内置的commons-lang3.5.jar 问题是,当我运行这个包时,karaf将自动加载另一个commons-lang3.1.jar。我不确定什么时候能装。但我的包裹被撞了 有没有办法卸载karaf默认内置捆绑包?没有,不要“卸载”默认内置捆绑包,因为它被其他人使用。 确保您自己的bundle对commons lang bundle进行了干净的导入 bnd指令如下所示: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
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文件的手动副本,这显然不再需要了。他们还希望包版本应该