Java 为什么我部署的eclipse插件抛出NoClassDefFoundError异常?

Java 为什么我部署的eclipse插件抛出NoClassDefFoundError异常?,java,eclipse,eclipse-plugin,noclassdeffounderror,Java,Eclipse,Eclipse Plugin,Noclassdeffounderror,我问这个问题,回答这个问题,是为了避免我以后再掉进这个老鼠洞里 我正在用大约40个插件构建一个基于eclipse IDE的跨平台软件开发环境。当我安装最新的夜间构建并在Linux测试系统上进行一些测试时,当我执行某个操作时,应用程序开始抛出可怕的java.lang.NoClassDefFoundError。这在我的Windows安装中没有发生。这在我的Linux或Windows开发环境中没有发生。此操作及其背后的代码是新的,因此尚未包含在我们的自动化测试套件中 引发异常的插件试图访问另一个插件中

我问这个问题,回答这个问题,是为了避免我以后再掉进这个老鼠洞里

我正在用大约40个插件构建一个基于eclipse IDE的跨平台软件开发环境。当我安装最新的夜间构建并在Linux测试系统上进行一些测试时,当我执行某个操作时,应用程序开始抛出可怕的java.lang.NoClassDefFoundError。这在我的Windows安装中没有发生。这在我的Linux或Windows开发环境中没有发生。此操作及其背后的代码是新的,因此尚未包含在我们的自动化测试套件中

引发异常的插件试图访问另一个插件中的静态类方法,但未能找到该类。我尝试过的事情:

  • 第一个想法:静态初始值设定项由于某种原因失败!不。我可以看到其他插件在失败之前访问这个静态类和方法(通过将我的调试器附加到我的产品的已安装实例并单步执行代码)

  • 它从其他插件工作的事实消除了失败的其他常见原因,即不能正确导出包。它被正确地导出

  • 我翻遍了我的插件依赖列表,将它们与能够访问有问题的类但没有成功的插件进行比较。所有依赖项都被考虑在内

  • 我深入研究了我的MANFEST.MF。我在MANIFEST.MF中从使用“Required Bundle”切换到“Import Package”。这给我带来了新的问题,所以我恢复了那个改变。一切看起来都很好

  • 我的build.properties看起来不错。没有太多问题。它与我的MANFIEST.MF一致,在这里它很重要

  • 我在已安装的实例上解构了插件,以确保该类确实存在。是的

  • 一切都配置正确。一切

    我倒了很多相关的SO问题和博客帖子,但没有一个能提供有效的解决方案,也没有任何关于这个问题的额外见解

    下一步是开始迭代我的夜间构建,以找到问题首次出现的构建。一旦我确定了这个构建,我就能够迭代前一天的所有提交,完成完整的构建,然后安装以找到破坏它的提交


    我在10天前开始安装,每晚安装一次。一直到在我的测试环境中失败的构建。他们每个人都工作了。为什么?请参阅下面的我的答案(或提交您自己的答案)。

    在测试新的eclipse IDE构建时,请确保从一个新的不存在的工作区目录开始,并使用“-clean”命令行参数刷新从以前安装中保留下来的所有缓存

    发生故障是因为我(1)在启动应用程序之前未能删除我以前的工作区目录;(2)未使用“-clean”命令行参数删除相关缓存信息;(3)即使是“-clean”可能还不够,我也删除了整个应用程序目录(这反过来又删除了“configuration”目录以及其中可能没有被“-clean”命令行参数“clean”的所有缓存数据)

    我一直在重构一些类名,以获得更有意义的名称。当我在现有环境下运行该产品时,该产品正在使用缓存数据,获取已重命名的类的旧名称,但无法解析该名称。(您可能认为看到旧名称是一个很好的线索,但不幸的是,我尝试的第一件事是撤消类名重构,从而恢复以前的名称。因此错误报告了正确的名称,但我怀疑,有一个排序签名没有解析。)

    当然,在测试时总是从一个新的工作区开始是一个最佳实践。我从事EclipseIDE开发已有多年,对此我非常了解。但昨天我忘了(我的Windows安装没有因为任何原因出现同样的错误,这一事实对我没有帮助)。有时你会忘记……它会咬你