我有包 A、B 和 C。A 包含一个包“a”,它分别由包 B 和 C 中的包 b 和 c 中的代码依赖。
bundle A {
package a
export-package:a
}
bundle B {
package b.a
package b.b
package b.c
package b.d
package b.e
import-package: a
export-package:b.a;uses:=a,
b.b;uses:=b.a,
b.c;uses:=b.b,
b.d;uses:=b.c,
b.e;uses:=b.d
}
bundle C {
package c
import-package: b.e,
a
}
当我一起更新所有这些包时,我经常会遇到使用约束违规(Felix 报告风格):
Chain 1:
C [47.1]
import: (&(osgi.wiring.package=a)(version>=1.1.0))
|
export: osgi.wiring.package=a
A [9.1]
Chain 2:
C [47.1]
import: (&(osgi.wiring.package=b.e)(version>=1.0.0))
|
export: osgi.wiring.package=b.e; uses:=a
B [33.0]
import: (&(osgi.wiring.package=a)(version>=1.0.0))
|
export: osgi.wiring.package=a
C [9.0]
最初我很惊讶会为“a”生成一个使用子句。这未在 Manifest 或提供这些捆绑包的 OBR repository.xml 中声明。但是,类型是通过它们的 API 公开类型的,所以我想这就是它的来源。
我发现解决这些问题的唯一方法是增加中间包的导出和导入的版本号,例如在这个例子中。但是,有很多包最终使用“a”,可传递。
这意味着每次更新 'a' 时,我还需要使用新版本更新 a 上的所有传递依赖项。增加这些软件包的版本号是否正确?重构我的代码以减少相互依赖是唯一的另一种方式吗?