为什么我在 Java 中收到 NoClassDefFoundError?

新手上路,请多包涵

当我运行我的 Java 应用程序时,我得到一个 NoClassDefFoundError 。这通常是什么原因?

原文由 John Meagher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 782
2 个回答

当您的代码依赖于一个类文件并且它在编译时存在但在运行时找不到时会导致这种情况。寻找构建时间和运行时类路径的差异。

原文由 Mocky 发布,翻译遵循 CC BY-SA 2.5 许可协议

虽然这可能是由于编译时和运行时之间的类路径不匹配造成的,但这不一定是真的。

在这种情况下,重要的是要在我们的脑海中牢记两个或三个不同的异常:

  1. java.lang.ClassNotFoundException 此异常表示在类路径中找不到该类。这表明我们正在尝试加载类定义,而类路径中不存在该类。

  2. java.lang.NoClassDefFoundError 此异常表明 JVM 在其内部类定义数据结构中查找类的定义但未找到它。这不同于说它不能从类路径加载。通常这表明我们之前尝试从类路径加载一个类,但由于某种原因它失败了 - 现在我们试图再次使用该类(因此需要加载它,因为它上次失败了),但是我们’我们甚至不会尝试加载它,因为我们之前加载它失败了(并且有理由怀疑我们会再次失败)。较早的失败可能是 ClassNotFoundException 或 ExceptionInInitializerError(表示静态初始化块中的失败)或任何数量的其他问题。关键是,NoClassDefFoundError 不一定是类路径问题。

原文由 Jared 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题