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

时间:2018-01-12 07:00:58

标签: jdbc clickhouse

我在我的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来包装jar。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

错误'无法初始化类....'意味着JVM已经尝试过并且无法对所提到的类执行静态初始化。

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

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

还值得指出的是,异常消息“无法初始化类......”意味着静态初始化已经失败。换句话说,当抛出此异常时,它至少是JVM第二次加载类失败。当JVM第一次无法加载此类时,您的应用可能会报告更多信息性错误消息。