错误:无法初始化类 ru.yandex.clickhouse.ClickHouseUtil

Posted

技术标签:

【中文标题】错误:无法初始化类 ru.yandex.clickhouse.ClickHouseUtil【英文标题】:Error: Could not initialize class ru.yandex.clickhouse.ClickHouseUtil 【发布时间】:2018-01-12 07:00:58 【问题描述】:

我在我的 java 应用程序中使用 clickhouse-jdbc。我将它添加到pom.xml,如下所示:

<dependency>
    <groupId>ru.yandex.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.1.34</version>
</dependency>

当我运行我的 java 应用程序 java -jar myapp.jar。它正在抛出:

java.lang.NoClassDefFoundError: 无法初始化类 ru.yandex.clickhouse.ClickHouseUtil

而且在我打包的jar文件中,还有ClickHouseUtil.class。我使用Intellij Idea 包装罐子。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

错误'Could not initialize class ....'意味着JVM已经尝试过并且未能执行所提到的类的静态初始化。

类的静态初始化涉及为任何static 字段分配值并运行任何static ... 块。有问题的类是ru.yandex.clickhouse.ClickHouseUtil,该类的静态初始化仅包括设置静态最终字段CLICKHOUSE_ESCAPER。这似乎依赖于几个 Guava 逃逸类(com.google.common.escape.Escapercom.google.common.escape.Escapers)。

所以我怀疑这些 Guava 类不在您打包的 JAR 文件中。

还值得指出的是,异常消息“Could not initialize class ....”表示静态初始化已经失败。换句话说,当这个异常被抛出时,至少是JVM第二次加载类失败了。当 JVM 首次加载此类失败时,您的应用可能会报告更多信息性错误消息。

【讨论】:

以上是关于错误:无法初始化类 ru.yandex.clickhouse.ClickHouseUtil的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:错误:无法在 NSManagedObject 类“视频”上调用指定的初始化程序

Gradle 错误:无法初始化类 org.codehaus.groovy.runtime.InvokerHelper

Weblogic 错误 - 无法初始化类 weblogic.jndi.Environment

错误:无法初始化类 ru.yandex.clickhouse.ClickHouseUtil

错误:无法初始化类 com.android.sdklib.repositoryv2.AndroidSdkHandler

CoreData:错误:无法在 NSManagedObject 类“BNRItem”上调用指定的初始化程序