我在我的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。我该如何解决这个问题?
答案 0 :(得分:1)
错误'无法初始化类....'意味着JVM已经尝试过并且无法对所提到的类执行静态初始化。
类的静态初始化涉及为任何static
字段分配值并运行任何static { ... }
块。有问题的类是ru.yandex.clickhouse.ClickHouseUtil
,此类的静态初始化仅包括设置静态最终字段CLICKHOUSE_ESCAPER
。这似乎依赖于几个Guava escaper类(com.google.common.escape.Escaper
和com.google.common.escape.Escapers
)。
所以我怀疑这些Guava类不在你打包的JAR文件中。
还值得指出的是,异常消息“无法初始化类......”意味着静态初始化已经失败。换句话说,当抛出此异常时,它至少是JVM第二次加载类失败。当JVM第一次无法加载此类时,您的应用可能会报告更多信息性错误消息。