jar包冲突常用的解决方法
生活随笔
收集整理的這篇文章主要介紹了
jar包冲突常用的解决方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自https://www.cnblogs.com/xiayangy/p/4038347.html
jar包沖突常見的異常為找不到類(java.lang.ClassNotFoundException)、找不到具體方法(java.lang.NoSuchMethodError)、字段錯誤( java.lang.NoSuchFieldError)或者類錯誤(java.lang.LinkageError);
常見的解決方法如下:
1、首先做法是打出工程文件的依賴樹,將根據jar包依賴情況判定是不是同一個jar包依賴了多個版本,如果確認問題所在,直接exclusion其中錯誤的jar包即可;
2、如果通過看依賴樹不能確定具體沖突的jar包,可以使用添加jvm參數的方式啟動程序,將類加載的具體jar信息打印出來;-verbose:class
3、經過上述步驟基本就可以解決jar包沖突問題,具體的問題要具體分析,當問題不可重現時上述方法均不會奏效;
如果當遇到應用重啟沖突不可重現的情況建議將每次異常信息進行重點的保留,方便不可重現時進行分析;
例如,碰到一例bean初始化失敗:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tfsManager' defined in URL [jar:file:/home/admin/wireless-qrshare/target/wireless-qrshare.war/WEB-INF/lib/qrshare.common.config-1.0-SNAPSHOT.jar!/mobile/biz-service.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.taobao.common.tfs.DefaultTfsManager]: Constructor threw exception; nested exception is java.lang.VerifyError: Cannot inherit from final class
此時定位到tfsManager這個bean初始化內部調用的類:
通過查找定位到httpcore的版本存在沖突;
jar包沖突常見的異常為找不到類(java.lang.ClassNotFoundException)、找不到具體方法(java.lang.NoSuchMethodError)、字段錯誤( java.lang.NoSuchFieldError)或者類錯誤(java.lang.LinkageError);
常見的解決方法如下:
1、首先做法是打出工程文件的依賴樹,將根據jar包依賴情況判定是不是同一個jar包依賴了多個版本,如果確認問題所在,直接exclusion其中錯誤的jar包即可;
2、如果通過看依賴樹不能確定具體沖突的jar包,可以使用添加jvm參數的方式啟動程序,將類加載的具體jar信息打印出來;-verbose:class
3、經過上述步驟基本就可以解決jar包沖突問題,具體的問題要具體分析,當問題不可重現時上述方法均不會奏效;
如果當遇到應用重啟沖突不可重現的情況建議將每次異常信息進行重點的保留,方便不可重現時進行分析;
例如,碰到一例bean初始化失敗:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tfsManager' defined in URL [jar:file:/home/admin/wireless-qrshare/target/wireless-qrshare.war/WEB-INF/lib/qrshare.common.config-1.0-SNAPSHOT.jar!/mobile/biz-service.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.taobao.common.tfs.DefaultTfsManager]: Constructor threw exception; nested exception is java.lang.VerifyError: Cannot inherit from final class
此時定位到tfsManager這個bean初始化內部調用的類:
通過查找定位到httpcore的版本存在沖突;
總結
以上是生活随笔為你收集整理的jar包冲突常用的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 总结几种线程异步转同步的方法
- 下一篇: 特殊格式的 汇潮支付接口对接