1. 程式人生 > 實用技巧 >jar衝突解決方案

jar衝突解決方案

>>> hot3.png

每次依賴的二方庫Or三方庫升級經常會遇到jar依賴衝突的問題,此問題經常會搞得大家暈頭轉向不停的猜測哪裡出問題,下面梳理一下解決問題步驟。

以下案例為預警系統升級Napoli2.0 引起上傳附件失敗。

第一步定位問題:

2014-01-0218:49:26,962http-8080-5[AbstractWebxRootController.java:189]ERROR:Erroroccurredwhileprocessrequest/quickview/upload/upload.htm

java.lang.NoSuchMethodError:org.apache.commons.io.output.DeferredFileOutputStream

.<init>(ILjava/lang/String;Ljava/lang/String;Ljava/io/File;)V

at **********.upload.impl.cfu.AbstractFileItem.getOutputStream(AbstractFileItem.java:562)

分析上面日誌會看到三個資訊

AbstractWebxRootController 日誌輸出位置

DeferredFileOutputStream出錯類(因為此類在多個jar中出現導致jar衝突)

AbstractFileItem 異常跑出類

第二步 配置環境獲取 DeferredFileOutputStream 具體使用jar 的路徑

AbstractFileItem.java:562 打斷點

找出Expressions檢視(Window->show view ->Expressions)

新增表示式:DeferredFileOutputStream.class.getProtectionDomain().getCodeSource().getLocation();

第三部 進行debug 如最後圖所示

第四步:排除衝突

經過上面三步 定位到使用的jar 後排除掉

方法一:使用eclipse 中pom依賴關係檢視定位

方法二:使用cmd命令排除,mvndependency:tree>tree.txt

最後改pom 程式碼,這裡就不列出來了

實際錯誤為 commons.is-1.3.1.jar 上圖為去掉衝突之後的實際位置

155041_Pk0g_128625.jpg

155241_H9ux_128625.jpg


轉載於:https://my.oschina.net/dfwang/blog/189862