我只是想知道如果同一个包被不同的包多次导出,容器如何选择加载类的包。
鉴于以下情况属实。请注意,该列表还包含部署捆绑包的实际顺序。
如果添加了第4个捆绑包并且需要“package.x.SomeClass”1-2从哪里选择?
所有容器是否都做同样的事情,或者可用的流行软件包之间的行为是否不同?
答案 0 :(得分:2)
框架将选择A或B.它不是“随机”,但启发式是复杂的,最好不要尝试预测会发生什么。此外,此行为中的行为未指定,并且受OSGi框架实现之间的差异影响。
答案 1 :(得分:2)
OSGi是一个组件框架,整个想法是这些问题无用讨论,因为它们可能因框架和已安装的软件包集而异。您所做的任何未指定的假设都可能会被违反并导致代码崩溃。 OSGi的优点在于它允许您指定您的约束。 OSGi框架永远不会违反您的约束,这是您的保证。如何在特定情况下找到解决方案应该完全无关紧要,因为任何隐含的假设都可能在其他情况下导致错误。
答案 2 :(得分:0)
在Felix中,容器从包的0.0.0版本开始,然后向上递增。然后它将连接到它命中的捆绑包的第一个版本。因此,如果您有两个捆绑包,版本1.1.1和版本1.2.0,并且您尝试连接到该包但未指定版本号,则Felix应始终选择版本1.1.1。