問題背景:我在工程中引入了smiley-http-proxy-servletjar包
<dependency>
<groupId>org.mitre.dsmiley.httpproxy</groupId>
<artifactId>smiley-http-proxy-servlet</artifactId>
<version>1.7</version>
</dependency>
然後運行報錯 java..NoSuchMethodError: org.apache.http.util.EntityUtils.consume(Lorg/apache/http/HttpEntity;)V
給我的第一感覺就是一個jar衝突的問題,引入了這個smiley-http-proxy-servlet依賴之後自動隱式引入了httpcore。
如下在idae中搜索類全限定名org.apache.http.util.EntityUtils。發現有兩個jar中都包含了這個。
且二者的version.properties中版本不通。
httpcore-4.4.8.jar 是4.4.8版本;
GMServiceClient-1.0.jar 的httpcore版本是4.0;
因爲java運行時去找的版本是httpcore-4.0.jar,而EntityUtils.consume方法在4.0版本中不存在的。因此報錯 java..NoSuchMethodError: org.apache.http.util.EntityUtils.consume(Lorg/apache/http/HttpEntity;)V
解決方法
方法1、將smiley-http-proxy-servlet依賴移動到GMServiceClient-1.0.jar依賴之前,這樣的話運行時就會去找httpcore-4.4.8.jar 了
方法2、自己創建所有衝突的類