maven問題ClassNotFoundException或NoClassDefFoundError解決


最近在做項目時老是遇到ClassNotFoundException、NoClassDefFoundError。對這些問題進行初步總結。

1.ClassNotFoundException

1.1 檢查jar相應jar包是否已經引入

      例如,idea 使用ctrl+n查看工程中是否有該類,進入該類查看jar包是否被引入進相應工程。

1.2. jar包沖突

     a. 先得知該類所在jar包。例如,idea 使用ctrl+n查看工程中那些jar包有該類存在。

     b.然后使用maven命令mvn dependency:tree 查看項目依賴樹。

    c.根據工程決定jar包取舍。

       例如a.jar 依賴 s 版本為1, b.jar含有s版本為2。現在決定使用b.jar s版本2。使用exclusions去除a.jar s版本2依賴沖突解決。

  還可以通過jar包“短路優先”、“先聲明優先”解決。

 1.3 maven依賴得jar為scope=provided

 依賴由容器提供,即需要maven工程其他jar間接引入或者單獨引入

 maven scope可以閱讀相關資料深入了解。

2. NoClassDefFoundError

2.1 類中靜態代碼塊運行拋出未捕獲異常。

  靜態代碼塊捕獲異常。

2.2 靜態方法無法有依賴問題。例如靜態方法參數類找不到,或者參數類沖突。

  debug定位到具體靜態方法。解決依賴沖突問題。

 

注:上面截圖中HttpServletRequest在項目運行中沒有發生沖突,是因為javaee-api-8.0.jar 是 compile, tomcat-embed-core-8.5.31jar 是runtime(運行時動態加載並實例化)。

 

 

   

 


免責聲明!

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



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