java与OSGI中的类加载混淆
我在一个RCP项目中遇到了问题。 我有一个OSGI jar,比如说jar-A,它从另一个OSGI jar导入一些包,比如说jar-B。现在我又有一个OSGI jar-C,它与jar-A具有相同的包结构,但其中包含不同的类
我有一个插件称为“plugin-a”,它的构建路径中同时包含jar-a和jar-B,并且作为运行时依赖项。现在plugin-A导出jar-A和jar-B的包
我还有一个“plugin-B”,它的构建路径中有“jar-C”,作为运行时依赖项。现在plugin-B将plugin-A作为必需的捆绑包。所以从技术上讲,它应该能够访问“jar-A”和“jar-B”的包,对吗
现在plugin-B有一个类从jar-a和jar-C的类导入包。它可以很好地识别jar-C的类,因为它位于构建路径中,但它不能识别jar-A的类。它说“some X类的类型无法解析。它是从必需的.class文件间接引用的”,其中some X类位于jar-A中。该X类不应该从导出该类的必需bundle plugin-A中识别出来吗? 当我把这个jar-A放在plugin-B的包路径中时,我再也不会遇到这个问题了
# 1 楼答案
我不确定我是否了解所有这些,但是只有在插件的
MANIFEST.MF
文件的Export-Package
项中列出的包才可供其他插件使用在舱单上。MF编辑器在“导出的包”部分的“运行时”选项卡上指定这些
我的一个插件中的导出包部分示例: