在OSGI中混淆了类加载

时间:2016-03-09 20:33:03

标签: java compiler-errors osgi eclipse-rcp classloader

我有一个RCP项目,我遇到了问题。 我有一个OSGI jar让我们说jar-A从另一个osgi jar导入一些包就让我们说jar-B。现在我还有一个osgi jar-C,它与jar-A具有相同的包结构,但其中包含不同的类。

我有一个插件说“plugin-A”,它的构建路径中包含jar-A和jar-B,并且作为运行时依赖项。现在插件-A导出jar-A和jar-B的包。

我还有一个“plugin-B”在其构建路径中具有“jar-C”并且作为运行时依赖项。现在插件-B有插件-A作为必需的包。从技术上讲,它应该能够访问“jar-A”和“jar-B的包裹吗?”

现在plugin-B有一个类从jar-A和jar-C的类导入包。它正在识别jar-C的类很好,因为它在构建路径中,但它不识别jar-A的类。它说“某些X的类型无法解析。它是从所需的.class文件间接引用的”,其中一些X类在jar-A中。不应该从导出这个类的必需的bundle插件-A中识别这个X类吗? 当我把这个jar-A放在插件-B的捆绑路径中时,我不再遇到这个问题了。

1 个答案:

答案 0 :(得分:0)

我不确定是否遵循了所有这些,但只有插件的Export-Package文件中的MANIFEST.MF条目中列出的软件包才可用于其他插件。

在MANIFEST.MF编辑器中指定'运行时' “导出的软件包”中的标签页'部分。

我的一个插件的示例Export-Package部分:

Export-Package: greg.music.core.common,
 greg.music.core.databinding,
 greg.music.core.e4util,
 greg.music.core.editor,
 greg.music.core.preferences,
 greg.music.core.progress,
 greg.music.core.services,
 greg.music.core.showin,
 greg.music.core.util,
 greg.music.core.views,
 greg.music.core.xml