maven jar包衝突常見報錯及解決方法

Ikeepmoving發表於2015-08-06

見到如下錯誤,可以想到是不是jar包衝突

1.java.lang.NoSuchMethodError
2.java.lang.ClassNotFoundException
3.java.lang.NoClassDefFoundError

解決辦法

以一個錯誤為例:

解決方法:
1.首先定位到具體類。查到org.apache.httpHost對應的maven依賴。在intellij idea中search everywhere輸入類名,找到依賴。或者百度一下。

2.開啟httpHost類,找到具體的報錯位置。根據錯誤資訊,HttpRoute的106行報錯。找到錯誤。注意,錯誤資訊依據提示了jar包版本為4.4,所以找到4.4所對應的類。

可以看到錯誤位置,點選進入此類,定位到具體jar包。




可以看到4.1.4版本到httpcore並沒有需要的構造方法。系統裡存在兩個版本,一個是4.1,一個是4.4,系統調到4.1的找不到新方法,所以報noSuchMethodException().
所以我們要做的就是在maven中排除掉。4.1.4版本。
3.通過名字:com.alibaba.external:httpcomponent.httpcore我們知道,groupId為冒號前的com.alibaba.external,artifiedId為冒號後的:httpcomponent.httpcore
我們打出maven tree進行全文搜尋即可定位到在哪個依賴的gav中排除。進入pom所在目錄,mvn dependency:tree > treeweb.txt 就可以把tree資訊存在了txt檔案中,再全文搜尋com.alibaba.external即可。找到具體位置後,定位到在哪個依賴中排除。
4.排除依賴
<exclusions>
	<exclusion>
			<groupId>com.alibaba.external</groupId>
			<artifactId>httpcomponents.httpcore</artifactId>
	</exclusion>
</exclusions>

5.重新匯入maven依賴就可以了

注意

一個類的jar包名可以隨意改,所以一定注意,不能通過jar報名來找,要通過類名找,然後定位到具體的依賴jar包進行排除。





相關文章