不同功能jar,同包名同类名冲突解决
2019-11-13 本文已影响0人
秦时的明月夜
原因
项目中需要用到httpClient
和tika-app
相关jar
,在使用httpClient
远程调用的时候发现有冲突并且没有使用maven
等其他包管理工具。
java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:146)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:964)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:56)
image.png
SSLConnectionSocketFactory
这个类调用的有问题,由于包名和类名相同,没有调用httpClient
里的,而是调用tika-app
里的。
解决
1、百度结果是httpClient
的jar
版本冲突,但是项目中只有一个版本,这是不符合的。但是这种情况是会有。
2、把httpClient
相关的jar
包删除,然后在idea
中(随便创建一个类或者在其他类的方法中) new SSLConnectionSocketFactory()
,点进去定位当前类在哪个jar
里。然后定位到tika-app
这个jar
。
3、tika-app
里的org.apache.http
这个包,项目中没有用到,果断删掉。
删除方法 :
7z d tika-app-1.12.jar org/apache/http
7z
是一种压缩和解压工具。
4、还有一种方法是让httpClient
包在tika-app
之前,这样的话class
在加载的时候先加载前面的,后面的就忽略掉了。(并没有试成功,我不知道如何让httpClient
在tika-app
之前加载,忽略后面)