我得到一个 NoClassDefFoundError 当我运行java应用程序时。造成这种情况的典型原因是什么?
NoClassDefFoundError
vsikbqxv16#
如果有人来这里是因为 java.lang.NoClassDefFoundError: org/apache/log4j/Logger 错误,在我的例子中,它是因为我使用了log4j2(但是我没有添加它附带的所有文件),而一些依赖库使用了log4j1。解决方案是添加log4j1.x桥:jar log4j-1.2-api-<version>.jar 它与log4j 2一起提供。更多信息请参见log4j2迁移。
java.lang.NoClassDefFoundError: org/apache/log4j/Logger
log4j-1.2-api-<version>.jar
7xllpg7q17#
虽然这可能是由于编译时和运行时之间的类路径不匹配造成的,但这不一定是真的。在这种情况下,我们必须清楚地记住两个或三个不同的例外: java.lang.ClassNotFoundException 此异常表示在类路径上找不到该类。这表明我们试图加载类定义,而类路径上不存在该类。 java.lang.NoClassDefFoundError 此异常表示jvm在其内部类定义数据结构中查找类的定义,但没有找到它。这不同于说它不能从类路径加载。通常这表示我们以前试图从类路径加载一个类,但是由于某种原因失败了——现在我们尝试再次使用这个类(因此需要加载它,因为它上次失败了),但是我们甚至不打算加载它,因为我们之前加载它失败了(并且合理地怀疑我们会再次失败)。早期的故障可能是classnotfoundexception或exceptionininitializererror(表示静态初始化块中的故障)或任何其他问题。关键是,noclassdeffounderror不一定是类路径问题。
java.lang.ClassNotFoundException
java.lang.NoClassDefFoundError
17条答案
按热度按时间vsikbqxv16#
如果有人来这里是因为
java.lang.NoClassDefFoundError: org/apache/log4j/Logger
错误,在我的例子中,它是因为我使用了log4j2(但是我没有添加它附带的所有文件),而一些依赖库使用了log4j1。解决方案是添加log4j1.x桥:jarlog4j-1.2-api-<version>.jar
它与log4j 2一起提供。更多信息请参见log4j2迁移。7xllpg7q17#
虽然这可能是由于编译时和运行时之间的类路径不匹配造成的,但这不一定是真的。
在这种情况下,我们必须清楚地记住两个或三个不同的例外:
java.lang.ClassNotFoundException
此异常表示在类路径上找不到该类。这表明我们试图加载类定义,而类路径上不存在该类。java.lang.NoClassDefFoundError
此异常表示jvm在其内部类定义数据结构中查找类的定义,但没有找到它。这不同于说它不能从类路径加载。通常这表示我们以前试图从类路径加载一个类,但是由于某种原因失败了——现在我们尝试再次使用这个类(因此需要加载它,因为它上次失败了),但是我们甚至不打算加载它,因为我们之前加载它失败了(并且合理地怀疑我们会再次失败)。早期的故障可能是classnotfoundexception或exceptionininitializererror(表示静态初始化块中的故障)或任何其他问题。关键是,noclassdeffounderror不一定是类路径问题。