【问题标题】:Eclipse Plugin Development - ClassCastException cannot cast abc.xyz to abc.xyzEclipse 插件开发 - ClassCastException 无法将 abc.xyz 转换为 abc.xyz
【发布时间】:2016-11-10 08:13:30
【问题描述】:

我目前正在 Eclipse 中开发一个插件。我遇到了以下代码的问题:

XYZ object1 = XYZ(object2);

上述行抛出异常的地方:

原因:java.lang.ClassCastException:abc.XYZ 无法转换为 abc.XYZ


XYZ 类来自另一个插件。不幸的是,上述插件没有可见的包。因此,将其设置为依赖项会引发 ClassDefNotFound 异常。

幸运的是,我有插件的.jar 并将其添加到我的插件的构建路径中。当我这样做时,它仍然返回一个ClassDefNotFound 异常。我环顾四周,发现对于插件,引用的库不会被 JVM 自动“检测到”,因此,我按照解决方案将所述 jar 添加到我的插件的 MANIFEST.MFbin.includes 部分build.properties.

按照上述解决方案后,我再次尝试,现在我有 classCastException。至少,此时,jar 文件中的类XYZ 正在被加载。做了一些研究,我发现两个XYZ 类的类加载器是不同的。我很困惑我应该做什么。

这是整个问题的总结:

  • 必需的类来自另一个插件。所述插件没有可见的类。
  • 将依赖插件的 jar 文件添加到构建路径中。
  • 抛出 ClassDefNotFoundException。
  • 更新了我的插件的 manifest.mf 和 build.properties 配置。
  • 抛出 ClassCastException。

如果有人能解决这个问题,或者我能做些什么来解决这个问题,那就太好了。

提前感谢您提供的任何帮助/意见。

【问题讨论】:

    标签: java eclipse plugins eclipse-pde


    【解决方案1】:

    你不能这样做。 Eclipse 插件系统旨在防止您访问未导出的类。

    在您的插件中包含插件 jar 将始终使用与类加载器不同的类加载器,您将获得类转换异常。

    访问这些类的唯一方法是修改其他插件以导出这些类。

    【讨论】:

    • 我目前正在编辑另一个插件,如下:stackoverflow.com/questions/12448509/…。但是,我无法导出它。它没有显示在导出向导中。有什么想法吗?
    • 什么没有显示?如果您安装了插件开发环境,则应始终显示“文件 > 导出 > 可部署插件和片段”。请注意,如果插件已签名修改,则会出现错误。
    • 导入的插件未显示在“可部署插件和片段”对话框中。
    • 对不起,我对此一无所知,因为这不是我做过的事情。
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2020-10-04
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多