我在用 clickhouse-jdbc
在我的java应用程序中。我把它加到 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
用于 Package 罐。如何解决此问题?
1条答案
按热度按时间gajydyqb1#
错误“could not initialize class…..”表示jvm已经尝试对所提到的类执行静态初始化,但失败。
类的静态初始化涉及将值赋给任何
static
字段和运行任何static { ... }
阻碍。有问题的班级是ru.yandex.clickhouse.ClickHouseUtil
,该类的静态初始化只包括设置静态final字段CLICKHOUSE_ESCAPER
. 这似乎依赖于几个Guava逃逸类(com.google.common.escape.Escaper
以及com.google.common.escape.Escapers
).所以我怀疑这些guava类不在打包的jar文件中。
另外值得指出的是,异常消息“could not initialize class….”表示静态初始化已经失败。换句话说,当抛出此异常时,至少是jvm第二次未能加载类。当jvm第一次加载这个类失败时,您的应用程序可能报告了一条信息更丰富的错误消息。