为什么我在Java中得到一个NoClassDefFoundError?

2022-08-31 04:11:59

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


答案 1

虽然这可能是由于编译时和运行时之间的类路径不匹配造成的,但事实并非如此。

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

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

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


答案 2

当存在代码所依赖的类文件并且在编译时存在但在运行时找不到时,会导致此问题。查找生成时间和运行时类路径中的差异。


推荐