Error: Could not initialize class ru.yandex.clickhouse.ClickHouseUtil
Error: Could not initialize class ru.yandex.clickhouse.ClickHouseUtil
我在 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: Could not initialize class
ru.yandex.clickhouse.ClickHouseUtil
而在我打包的jar文件中,也有ClickHouseUtil.class
。我正在使用 Intellij Idea
来打包 jar。我该如何解决这个问题?
错误 'Could not initialize class ....' 表示 JVM 已经尝试执行提到的 class 的静态初始化但失败。
class 的静态初始化涉及为任何 static
字段和 运行 任何 static { ... }
块分配值。有问题的 class 是 ru.yandex.clickhouse.ClickHouseUtil
,此 class 的静态初始化仅包括设置静态最终字段 CLICKHOUSE_ESCAPER
。这似乎依赖于几个 Guava escaper classes(com.google.common.escape.Escaper
和 com.google.common.escape.Escapers
)。
所以我怀疑这些 Guava class 不在您打包的 JAR 文件中。
另外值得指出的是异常信息'Could not initialize class ....'意味着静态初始化已经已经失败了。也就是说,当抛出这个异常时,至少是JVM第二次加载class失败。当 JVM 首次加载此 class 失败时,您的应用程序可能报告了一条信息更丰富的错误消息。
我在 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: Could not initialize class ru.yandex.clickhouse.ClickHouseUtil
而在我打包的jar文件中,也有ClickHouseUtil.class
。我正在使用 Intellij Idea
来打包 jar。我该如何解决这个问题?
错误 'Could not initialize class ....' 表示 JVM 已经尝试执行提到的 class 的静态初始化但失败。
class 的静态初始化涉及为任何 static
字段和 运行 任何 static { ... }
块分配值。有问题的 class 是 ru.yandex.clickhouse.ClickHouseUtil
,此 class 的静态初始化仅包括设置静态最终字段 CLICKHOUSE_ESCAPER
。这似乎依赖于几个 Guava escaper classes(com.google.common.escape.Escaper
和 com.google.common.escape.Escapers
)。
所以我怀疑这些 Guava class 不在您打包的 JAR 文件中。
另外值得指出的是异常信息'Could not initialize class ....'意味着静态初始化已经已经失败了。也就是说,当抛出这个异常时,至少是JVM第二次加载class失败。当 JVM 首次加载此 class 失败时,您的应用程序可能报告了一条信息更丰富的错误消息。