java.lang.NoClassDefFoundError:无法初始化类okhttp3.OkHttpClient



作为解决GIT漏洞问题的一部分,我将splunk库javalogging从1.7.0升级到1.11.1。

但当我把它部署到我的k8s集群时,我会得到这样的错误java.lang.NoClassDefFoundError:无法初始化类okhttp3.OkHttpClient

我将我的部署版本更改为以前的版本,然后它运行良好。不确定为什么将版本更改为1.11.1会给我这个错误

这是工作

<dependency>
<groupId>com.splunk.logging</groupId>
<artifactId>splunk-library-javalogging</artifactId>
<version>1.7.0</version>
</dependency>

以下不工作

<dependency>
<groupId>com.splunk.logging</groupId>
<artifactId>splunk-library-javalogging</artifactId>
<version>1.11.1</version>
</dependency>

我必须升级到1.11.1或更高版本才能解决GIT漏洞问题。我读过很多解决方案,但没有发现任何有帮助的答案。这是一个maven项目,我正在java8上运行它。

另外,在本地运行jar文件并不会出现错误。问题仅在k8s集群中

2022年3月4日更新我在互联网上读到一些解决方案后明确声明了版本,比如下面的

<mockwebserver.version>4.7.2</mockwebserver.version>
<okhttp3.version>4.7.2</okhttp3.version>

但现在我得到了稍微不同的错误
org.springframework.boot.SpringApplication|应用程序运行失败org.springframework.beans.factory.BeanCreationException:创建类路径资源[org/springframeter/cloud/commons/httpclient/HttpClientConfiguration$OkHttpClientConfiguration.class]中定义的名称为"okHttpClientBuilder"的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.BeanInstanceException:未能实例化[okhttp3.OkHttpClient$Builder]:工厂方法"okHttpClientBuilder"引发异常;嵌套异常为java.lang.NoClassDefFoundError:无法初始化类okhttp3.internal.Until

早期错误为org.springframework.boot.SpringApplication|应用程序运行失败org.springframework.beans.factory.BeanCreationException:创建类路径资源[org/springframeter/cloud/commons/httpclient/HttpClientConfiguration$OkHttpClientConfiguration.class]中定义的名称为"okHttpClientBuilder"的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.BeanInstanceException:未能实例化[okhttp3.OkHttpClient$Builder]:工厂方法"okHttpClientBuilder"引发异常;嵌套异常为java.lang.NoClassDefFoundError:无法初始化类okhttp3.OkHttpClient

jar不能以jvm能够理解的方式对它所依赖的其他jar进行文件表达,运行时在需要访问它们之前不会检测到未实现的依赖关系。这将导致noclassdeffounderror崩溃正在运行的应用程序,也称为Jar-Hell问题,有许多maven目标(如mvn dependency:analyze(和插件可以帮助您进行依赖性分析,或者在语言级别上,您可以采用模块化编程来防止这种异常,但通常在请求传递依赖关系的直接依赖关系上使用<optional><exclusion>标记是进行版本和重复依赖关系控制的最有效选择。

最新更新