快速發現並解決maven依賴傳遞沖突


此文已由作者翟曜授權網易雲社區發布。

歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。


 最近在測試過程中,遇到了幾次maven傳遞依賴沖突的問題,所以記錄下解決的過程,遇到類似問題供參照。

問題現象:

某服務不可用,查看啟動log有報錯信息,例如:

java.lang.NoSuchMethodError,類名和方法名看起來,初步判斷出是在某個依賴的jar包里。

排查步驟:

首先確認是哪個jar包。根據類名進行搜索,確認jar包為:netty。同時發現本地依賴的jar包版本都有多個,已經基本可斷定是依賴版本沖突了。

確定是netty,那么看下具體是哪些地方引入了netty,在應用根目錄打印依賴樹:mvn dependency:tree>tree.txt

發現報錯的nkv中引入的版本號是3.6.3.Final,dubbok引入的版本號是3.2.5.Final。可以斷定是maven傳遞依賴的沖突了。

也可以在測試服務部署機器的tomcat lib目錄下查找,確實是有兩個版本的依賴:

解決辦法:

附:概念解釋

1.Maven依賴傳遞

假如有Maven項目A,項目B依賴A,項目C依賴B。那么我們可以說 C依賴A。也就是說,依賴的關系為:C—>B—>A。

那么我們執行項目C時,會自動把B、A都下載導入到C項目的jar包文件夾中。這就是依賴的傳遞性。

2.依賴傳遞的排除

如上,C—>B—>A。加入現在不想執行C時把A下載進來,那么我們可以用 <exclusions>標簽。

<dependencies>

    <dependency>

        <groupId>B</groupId>

        <artifactId>B</artifactId>

        <version>0.0.1</version>

         <exclusions>

            <exclusion>

              <!--被排除的依賴包坐標-->

              <groupId>A</groupId>

              <artifactId>A</artifactId>

              <version>0.0.1</version>

            </exclusion>

         </exclusions>

    </dependency>

</dependencies>

所以,上述錯誤現象的解決辦法就是:排除掉低版本依賴,引入高版本依賴。

提交代碼,再部署,服務啟動ok,調用ok。


免費體驗雲安全(易盾)內容安全、驗證碼等服務

更多網易技術、產品、運營經驗分享請點擊




相關文章:
【推薦】 為何要在網站上設置的驗證碼
【推薦】 網頁設計簡史看設計&代碼“隔膜”
【推薦】 限時購校驗小工具&dubbo異步調用實現限


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM