赞
踩
前天,在调第三方SDK开发的时候,报了一个错误为java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy,下面来说下产生这个的原因和解决办法:
原因:TrustStrategy这个类找不到,经查看这个TrustStrategy位于org.apache.http.ssl.TrustStrategy包底下,属于httpcore-4.4.jar包底下,或者更高版本底下,而4.4以下的版本并没有这个类,所以产生这个错误的原因就是项目底下引用了低版本的httpcore的jar包,而这个httpcore的jar包又是跟httpclient的jar包相关联的,所以httpclient的jar包也要用较高版本。
解决办法:由于我的是Maven项目,所以全局搜索引用了httpcore的jar包,即搜索httpcore,然后选择后缀名为xml的文件名,后面搜索出来一看有些模块果真引用了较低版本的httpcore和httpclient的jar包,pom.xml打包文件引用打代码如下:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.3</version>
</dependency>
此时就必须把这段代码改为如下所示,较高版本的相关jar包,但前提是你私服底下有这个jar包,或者本地资源库有这个jar包:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
后面,改完后再重新一试,还是报这个错误,原来httpcore的jar包和httpclient的jar包是有关联的,而pom.xml有些只有依赖了httpclient,但是在Maven依赖库底下还是有httpcore的jar包,还是低版本的,所以还是全局搜httpclient,把pom.xml底下的关于httpclient的全部改为如下所示的代码,没有httpcore的也要加这个依赖,不然还是会报错,代码如下所示:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
Caused by: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
… 19 more
然后上述的报错就解决了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。