伺服器jar包沖突怎麼修改
① Android引入多個jar包,沖突問題解決方案
Android引入多個jar包,沖突問題解決方案(引入jar包,即本地文件) 以引用載入第三方框架中也有okhttp3 okio沖突講解
(PS:如果不知道是那個jar沖突可以用指令gradlew app:dependencies查看)
1.找到項目中的libs->對應沖突的第三方包.jar。
3.用解壓工具打開(不是解壓亂塵,是打開。比如windows下可用360解壓打開)。
4.刪掉重復引用的包(okhttp3 + okio)。
5.重新打開虛喚項目,等待編譯。
6.可能出現innerClass mission警告,可以忽略掉,或者clean build。
7.如果還報錯的話那麼在app build.gradle加入嘩譽禪:
packagingOptions {
exclude 'META-INF/proguard/okhttp3.pro'
}
溫馨提示:
如果你的項目是因為剛剛添加了某個網路載入依賴導致的,那麼你就查看下這個庫下的哪一個依賴沖突了,在添加這個依賴的時候把它給過濾掉。具體寫法如下。
implementation ('com.***.***:XXX:1.2.0'){ // 所加的第三方框架
exclude mole: 'okhttp:3.10.0'
}
//或者要把組名一起添上去
implementation ('com.***.***:XXX:1.2.0'){ // 所加的第三方框架
exclude group: 'com.squareup.okhttp3'
}
② jar包沖突解決方法
今天圓啟啟動工戚坦程時候報高腔桐了一個slf4j相關的jar包沖突的問題,java.lang.NoSuchMethodError(找不到具體方法),在idea中發現slf4j-api有兩個不同的版本,解決辦法如下
在idea右側maven窗口中選中模塊名稱,右擊選擇jar包依賴樹
按ctr+f輸入沖突的jar包就可以找到它的繼承關系,找到根坐標,然後在pom.xml中找到對應的坐標exclusion就ok啦
jar包沖突時候也有可能如下報錯
1、java.lang.ClassNotFoundException(找不到類)
2、java.lang.NoSuchMethodError(找不到具體方法)
3、java.lang.NoSuchFieldError(欄位錯誤)
4、java.lang.LinkageError(類錯誤 這個我沒怎麼見過)
③ jar包沖突的解決方法
一般就是在報錯里找,如下,是我的報錯信息,如下所示,這里比較明顯的是org.apache.logging.slf4j.Log4jLoggerFactory這個類,報錯的意思是說,實際構建的是用的就是上面的那個類,用了之後就開始報錯了。
所以問題就很明確了,肯定是這個類不該用,肯定是不同的jar包中,出現了相同的類名導致的。
如果你使用idea開發的話,可閉液以雙擊shift,輸入用org.apache.logging.slf4j.Log4jLoggerFactory類,然後點擊如圖的小按鈕,找到對應的jar包,就找到了它的group,name,version等信息。
假設你用的是gredle,你可以跑一下dependencies,就可以拿到它們之間的全部的依賴,如果你用的maven的話,同樣的道理,只需要在idea中點擊,maven就可以了,
可以把2.2中跑出來轎局物得到的數據,粘貼在nodepa++中,然後搜索2.1中,對應的group,或是name都可以,通過這一步,就可臘鄭以定位到是哪個jar包引進沖突的包
gradle中的做法是如圖:
④ 解決項目中jar包沖突的終極方案
項目中經常會碰到jar包沖突,而很多情況下沖突的包是由於其他包依賴引入的,這個時候我們無法直接分辨沖突包是哪個依賴導致的,現在教你如何快速定位沖突包由哪個依賴引入的。
1.先配置gralde環境變數
具體配置方式參考: https://blog.csdn.net/u010042669/article/details/80914656
2.利用gradle命令找到項目中每個引用的依賴包,比如 你項目中使用com.android.support:cardview-v7:26.0.2中,而這個依賴會引入 com.android.support:support-annotations:26.0.2
命令:gradle host:dependencies
先進入要查詢的項目根目錄,host是application類型敬段擾 mole,通過這行命令可以遍歷這個mole中每個依賴的所有間接引用
結果如下:
通過這種方式就可以輕松定位引起沖突的依賴
3.找到沖突的亮旦包後,使用exclude group方式剔除
4.重新build後,再使用gradle host:dependencies查看依賴,已經沒了
5.最後,燃雹引來了勝利,可以開始慶祝了!!!
⑤ java jar包沖突怎麼解決
由於,lib目錄中的 struts.jar 和 struts-core-1.3.8.jar 存在沖突
導致部分伺服器上應用啟動報錯,或訪問後台JSP頁面時報TILES標簽錯誤,
經排查,其實struts.jar中的class文件在
struts-core-1.3.8.jar
struts-taglib-1.3.8.jar
struts-tiles-1.3.8.jar
中均已存在,且宏友版本要高於struts.jar中的class
struts.jar為version1.0
而巧瞎struts-core-1.3.8.jar,truts-taglib-1.3.8.jar,struts-tiles-1.3.8.jar為version1.2
在struts1.2中引用tiles tld的寫法發生變蔽寬槐化
故解決辦法如下:
1.去掉原strtus.jar
2.去掉struts-tiles.tld
3.將所有JSP頁面中的
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
改為
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>