classloader 在 bundle 和它的 fragment 之间复制时如何 class

how does the classloader when duplicated class between bundle and its fragment

我对OSGI片段有些误解,

假设我部署了一个包含两个 classes "com.company.C1" 和 "com.company.C2" 的包 "B",其中 C1 使用 C2。 然后,我为主机包 "B" 部署了一个片段 "F",其中 F 仅包含一个 class "com.company.C2"(第一个 class)

现在,如果 class "com.company.C1" 正在执行,将使用 class (文件) "com.company.C2",从 "B" 或 "F" ?

同一个 class C2 在同一个 class-loader 中出现两次是否会导致运行时错误(相同版本和不同版本)?

阅读OSGi核心规范“3.9.4整体搜索顺序”一章,一切都会一目了然。

简而言之:先检查包中的 classes,然后再检查片段包。如果你在 bundle 和 fragment bundle 中都有一个 class,那么 fragment bundle 中的那个将永远不会被使用。