NoClassDefFoundError 即使 Jar 存在于类路径中

Posted

技术标签:

【中文标题】NoClassDefFoundError 即使 Jar 存在于类路径中【英文标题】:NoClassDefFoundError even though Jar is present in classpath 【发布时间】:2021-06-10 17:55:34 【问题描述】:

我遇到了一个奇怪的问题,我正在尝试使用 Class.forName("com.cloudera.impala.jdbc41.Driver") 加载类 com.cloudera.impala.jdbc41.Driver,但它在运行时抛出异常。有人可以纠正我在这里做错了什么吗?

java.lang.NoClassDefFoundError: Could not initialize class com.cloudera.impala.jdbc41.Driver

使用以下 sn-p 打印类路径确实会打印类路径中存在的 Jar。

System.out.println(System.getProperty("java.class.path"))

【问题讨论】:

请提供完整的异常堆栈跟踪。它可能会显示无法初始化类的原因。 我还要确保您使用的是兼容的 JDK。我认为 JDBC 驱动程序 4.1 应该适用于 7 和 8。 【参考方案1】:

错误消息“无法初始化类”可能表示已找到该类,但在初始化期间抛出了异常,可能在静态块中。

这会导致 ClassLoader 无法“找到”类。令人困惑,我知道。查看该类中是否有任何静态块,如果有,则在此处设置调试器断点以查看发生了什么。

【讨论】:

以上是关于NoClassDefFoundError 即使 Jar 存在于类路径中的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使 jar 存在,火花应用程序也会因 java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig

即使CommonTermsQuery包含在jar中我也能得到NoClassDefFoundError,我可以在构建路径中看到它。可能是什么问题?

NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy

java.lang.NoClassDefFoundError

使用 Gradle 在运行时出现 NoClassDefFoundError

HttpClient NoClassDefFoundError