错误:无法初始化类 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.Escaper
和 com.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