jar衝突解決方案
每次依賴的二方庫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
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 上圖為去掉衝突之後的實際位置
轉載於:https://my.oschina.net/dfwang/blog/189862